您的位置:首页 > Web前端 > JavaScript

zepto在安卓下使用swipe, swipeLeft, swipeRight 无效解决

2015-07-04 18:02 585 查看
   最近在实现滑动div显示功能时,在安卓移动端有个棘手的问题。在安卓端使用zepto的滑动事件有无效的现象。

查找资料后在某问答网址上有人提出了使用
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();,保证了上下滑动不会受影响
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安卓 zepto js