2012-04-11 20 views
1

我目前正在按照響應式設計+移動第一種方法重新設計網站。Android 2.3.3上的touchmove事件數量嚴重減少

我試圖檢測使用觸摸功能設備上的JS的刷卡事件。爲此,我使用下面的代碼:

document.addEventListener ('touchstart', function(event) { 
    //Get initial finger coords 
}, false); 

document.addEventListener ('touchmove', function(event) { 
    //Update final finger coords 
}, false); 

document.addEventListener ('touchend', function(event) { 
    //Compare initial and final coords, trigger swipe events if necessary 
}, false); 

我已經測試在iPad 1這個代碼,iPhone 4和幾個設備運行的是Android 2.2.1,結果當我拖我的手指上屏幕是我所期待的:touchmove事件觸發多次(做長時間手勢時它可以很容易地上升到一百)。

當我在Android 2.3.3設備(我使用三星Galaxy S2)上測試它時,問題就出現了。使用其本地的瀏覽器,事件的數量減少到只有1(或很少2)。

我做錯了什麼或者應該是這樣嗎?有人發現了同樣的問題嗎?我無法在此版本的Andriod中找到有關touchmove事件行爲的文檔。

你可以在這裏進行測試(使用啓用觸摸的設備):http://jsfiddle.net/xs5BG/embedded/result/

回答

0

測試與我的HTC Desire Z的您的jsfiddle例如(運行2.3.3)我得到更多的不僅僅是一個touchmove事件 - 根據需要。所以我無法用這個設備重現你的實際問題,雖然在相同的API級別:(有趣的是,你的代碼也顯示了我在當前項目中遇到的問題:第一個touchmove事件似乎有某種閾值:

放下手指,只移動一點點就會產生0個touchmove事件......一旦超過閾值,它將以毫秒爲間隔觸發touchmove事件,因爲它會識別移動的每個像素距離(如它應該這樣做)也許這可能與你的現象有關你分別在2.3.3設備上看到這個嗎?

2

看來,在滾動開始工作後,星系S2不會觸發touchmove。如果您執行了preventDefault,它會將事件觸發爲預計。

0

在許多Android版本上,如果您不防礙touchstart上的默認設置,Android設備將進入默認滾動模式,並停止向webview發送觸摸事件。所以你需要

document.addEventListener ('touchstart', function(event) { 
    event.preventDefault(); 
}, false); 

現在所有的觸摸事件都會觸發,但默認的滾動將被禁用。

有一個墊片來克服這個模擬滑動手勢的問題https://github.com/TNT-RoX/android-swipe-shim