zepto在安卓下使用swipe, swipeLeft, swipeRight 无效解决
2015-07-04 18:02
585 查看
最近在实现滑动div显示功能时,在安卓移动端有个棘手的问题。在安卓端使用zepto的滑动事件有无效的现象。
查找资料后在某问答网址上有人提出了使用
event.preventDefault();可以取消安卓端的误判,经过测试后真的有用。于是通过使用js原生函数addEventListener()
来绑定 “touchstart”与“touchmove”事件来记录判断是否为水平滑动。
直接上代码:
因为只在安卓端需要,所以需要判断移动设备是否为安卓设备,在iPhone端使用的话反而会导致zepto 滑动不能使用。
思路是通过记录手指点击后运动坐标来判断为纵向滑动,还是水平滑动,如果是水平滑动,则执行event.preventDefault();,保证了上下滑动不会受影响
查找资料后在某问答网址上有人提出了使用
event.preventDefault();可以取消安卓端的误判,经过测试后真的有用。于是通过使用js原生函数addEventListener()
来绑定 “touchstart”与“touchmove”事件来记录判断是否为水平滑动。
直接上代码:
if($.os.android){ var startPos = {x: 0, y: 0, time: +new Date}; var isScrolling = 0;// 记录是垂直滚动还是水平滚动 document.addEventListener('touchstart', function(event){ var touch = event.targetTouches[0];//touches数组对象获得屏幕上所有的touch,取第一个touch startPos.x = touch.pageX; startPos.y = touch.pageY; }, false); document.addEventListener('touchmove', function(event){ if(event.targetTouches.length > 1 || event.scale && event.scale !== 1) return; var touchmove = event.targetTouches[0]; var endPos = {x:touchmove.pageX - startPos.x, y: touchmove.pageY - startPos.y}; isScrolling = Math.abs(endPos.x) < Math.abs(endPos.y) ? 1:0; //isScrolling为1时,表示纵向滑动,0为横向滑动 if(isScrolling === 0){ event.preventDefault(); } }, false); }
因为只在安卓端需要,所以需要判断移动设备是否为安卓设备,在iPhone端使用的话反而会导致zepto 滑动不能使用。
思路是通过记录手指点击后运动坐标来判断为纵向滑动,还是水平滑动,如果是水平滑动,则执行event.preventDefault();,保证了上下滑动不会受影响
相关文章推荐
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- 5个常见可用性错误和解决方案
- js可突破windows弹退效果代码
- JSP脚本漏洞面面观
- 使用BAT一句话命令实现快速合并JS、CSS
- js显示当前星期的起止日期的脚本
- 爆炸式的JS圆形浮动菜单特效代码
- js select常用操作控制代码
- 从jsp发送动态图像
- 原生js结合html5制作小飞龙的简易跳球
- js 页面模块自由拖动实例
- js实现小鱼吐泡泡在页面游动特效
- js 提交和设置表单的值
- PHP VBS JS 函数 对照表
- php结合安卓客户端实现查询交互实例
- PHP+JS实现大规模数据提交的方法
- 仿51JOB的地区选择效果(可选择多个地区)
- js身份证验证超强脚本
- C#与js实现去除textbox文本框里面重复记录的方法