2010-09-05 39 views
2

我正在嘗試爲移動應用程序實現可滾動元素,它看起來像您必須在初始touchStart事件上使用preventDefault,否則瀏覽器將不會觸發所有touchMove事件(推測是出於性能原因)。收聽JavaScript觸摸事件,但仍允許默認滾動行爲

所以看起來如果我想允許在overflown元素上觸摸滾動,當用戶觸摸該元素時,用戶將無法按照慣常的方式滾動頁面。如果溢出的元素佔據視口的大部分,則這是有問題的。

是他們的解決方法嗎?

回答

1

在這個庫

http://api.mutado.com/mobile/mtdtouch/js/

「核心」 的JavaScript包括基座UIComponent觸摸事件(WebKit的)優化看看。 示例中的UI.Scroll組件管理您的「防止默認問題」。

嘗試繼承了UIComponent並實現自己的事件處理程序這樣

$MTD.YourOwnComponent = $.klass($MTD.UIComponent, {  

    touchesBegan: function(e) { 
     // your stuff 
    }, 

    touchesMoved: function(e) { 
     // your stuff 
    }, 

    touchesEnded: function(e) { 
     // your stuff 
    } 

}); 

希望這有助於。

0

下面是一個簡單的解決方法:刪除touchstart處理程序。您可以僅使用touchmovetouchendtouchleaving處理程序重建大部分情況。

在我用Chrome瀏覽器進行測試的瀏覽器中,只要沒有touchstart處理程序,滾動就會發生;它並不關心其他人。只要您沒有在touchmove處理程序中積極呼叫ev.preventDefault,滾動工作。

儘管只是在手指開始移動時才發現觸摸事件,而不是在手指最初着陸時想要做的事情仍能正常工作,但此解決方法應該可以接受。

...另外我假設其他瀏覽器使用與Chrome相同的邏輯。

相關問題