2012-04-11 68 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