在 Android 2.3.3 上,触摸移动事件的数量大幅减少
Number of touchmove events severely reduced on Android 2.3.3
我目前正在按照响应式设计+移动优先的方法重新设计网站。
我正在尝试在支持触摸的设备上使用 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)。使用其原生浏览器,touchmove
事件的数量减少到只有 1 个(或很少 2 个)。
我做错了什么还是应该那样做?有没有人发现同样的问题?我无法在此版本的 Andriod 中找到有关touchmove
事件行为的文档。
您可以在此处进行测试(使用支持触摸的设备): http://jsfiddle.net/xs5BG/embedded/result/
似乎Galaxy S2在滚动开始工作后不会触发触摸移动。如果执行 preventDefault,它将按预期触发事件。
使用我的HTC Desire Z(运行2.3.3)测试您的jsFiddle示例,我得到的不仅仅是一个触摸移动事件 - 正如所期望的那样。因此,尽管在同一API级别:(,但我无法重现此设备的实际问题有趣的是,您的代码还显示了我在当前项目中遇到的问题:第一个触摸移动事件似乎具有某种阈值:
放下手指,只移动一点点,就会产生 0 个触摸移动事件......一旦超过阈值,它将以毫秒的间隔触发TouchMove事件,因为它会识别移动的每个像素距离(就像它应该做的那样)。也许这可能与您的现象有关,您是否也在 2.3.3 设备上看到了这一点?
版本上,如果你不阻止默认的触摸启动,安卓设备将进入默认滚动模式,并停止向网络视图发送触摸事件。所以你需要
document.addEventListener ('touchstart', function(event) {
event.preventDefault();
}, false);
现在,所有触摸事件都将触发,但默认滚动将被禁用。
有一个填充程序可以解决此问题,它模拟滑动手势 https://github.com/TNT-RoX/android-swipe-shim
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 需要在javascript或jquery中的Android或Iphone移动设备后退按钮点击事件
- 使用AngularJS应用程序为移动设备(iOS、Android等)构建本地应用程序的最佳方式
- Jquery.Load不适用于android浏览器,但适用于同一设备上的Firefox移动浏览器
- 将JavaScript代码从剪贴板粘贴到移动浏览器中–Android
- 开发离线MathJax Android移动应用程序
- 更改移动到phonegap中的下一个活动的风格-移动android
- jquery调整大小为移动窗口iPhone / Android
- 视频未在任何具有ios和Android版本的移动设备上播放,但在网页上播放
- JS点击移动替代品 - 在iOS和Android上也弃用了onclick
- 在 android 中单击按钮时在网络视图中显示的网页部分内移动
- JSPDF无法在移动设备(Android/iPhone)中生成PDF
- 在 Android 2.3.3 上,触摸移动事件的数量大幅减少
- 在android浏览器中,Javascript菜单向左移动,并暴露屏幕右侧的间隙
- Android移动菜单行为
- 移动Android设备上的HTML5地理定位行为
- 在Android Cordova上将内容从文件///移动到内容///(xapk/obb)后,Canvas.toDataU
- Bootstrap 3提交按钮不在Android移动Chrome浏览器中工作
- 用于打包移动应用程序(Android、iOS)的Javascript错误日志记录/报告/跟踪器
- 如何在桌面上模拟移动(android)浏览器