我正在嘗試爲移動應用程序實現可滾動元素,它看起來像您必須在初始touchStart事件上使用preventDefault,否則瀏覽器將不會觸發所有touchMove事件(推測是出於性能原因)。收聽JavaScript觸摸事件,但仍允許默認滾動行爲
所以看起來如果我想允許在overflown元素上觸摸滾動,當用戶觸摸該元素時,用戶將無法按照慣常的方式滾動頁面。如果溢出的元素佔據視口的大部分,則這是有問題的。
是他們的解決方法嗎?
我正在嘗試爲移動應用程序實現可滾動元素,它看起來像您必須在初始touchStart事件上使用preventDefault,否則瀏覽器將不會觸發所有touchMove事件(推測是出於性能原因)。收聽JavaScript觸摸事件,但仍允許默認滾動行爲
所以看起來如果我想允許在overflown元素上觸摸滾動,當用戶觸摸該元素時,用戶將無法按照慣常的方式滾動頁面。如果溢出的元素佔據視口的大部分,則這是有問題的。
是他們的解決方法嗎?
在這個庫
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
}
});
希望這有助於。
下面是一個簡單的解決方法:刪除touchstart
處理程序。您可以僅使用touchmove
,touchend
和touchleaving
處理程序重建大部分情況。
在我用Chrome瀏覽器進行測試的瀏覽器中,只要沒有touchstart
處理程序,滾動就會發生;它並不關心其他人。只要您沒有在touchmove
處理程序中積極呼叫ev.preventDefault
,滾動工作。
儘管只是在手指開始移動時才發現觸摸事件,而不是在手指最初着陸時想要做的事情仍能正常工作,但此解決方法應該可以接受。
...另外我假設其他瀏覽器使用與Chrome相同的邏輯。