HTML5单页面手势滑屏切换原理

2020-04-24 19:19:04易采站长站整理

ontouchstart: 初始化变量, 记录手指所在的位置,记录当前时间

XML/HTML Code复制内容到剪贴板

/*手指放在屏幕上*/    
document.addEventListener("touchstart",function(e){    
e.preventDefault();    
var touch = e.touches[0];    
startX = touch.pageX;    
startY = touch.pageY;    
initialPos = currentPosition; //本次滑动前的初始位置    
viewport.style.webkitTransition = ""; //取消动画效果    
startT = new Date().getTime(); //记录手指按下的开始时间    
isMove = false; //是否产生滑动    
}.bind(this),false);   

ontouchmove: 获得当前所在位置,计算手指在屏幕上的移动差量deltaX,然后使页面跟随移动

XML/HTML Code复制内容到剪贴板

/*手指在屏幕上滑动,页面跟随手指移动*/    
document.addEventListener("touchmove",function(e){    
e.preventDefault();    
var touch = e.touches[0];    
var deltaX = touch.pageX – startX;    
var deltaY = touch.pageY – startY;    
//如果X方向上的位移大于Y方向,则认为是左右滑动    
if (Math.abs(deltaX) > Math.abs(deltaY)){    
moveLength = deltaX;    
var translate = initialPos + deltaX; //当前需要移动到的位置    
//如果translate>0 或 < maxWidth,则表示页面超出边界    
if (translate <=0 && translate >= maxWidth){    
//移动页面    
this.transform.call(viewport,translate);    
isMove = true;    
}    
direction = deltaX>0?"right":"left"; //判断手指滑动的方向    
}    
}.bind(this),false);   

ontouchend:手指离开屏幕时,计算屏幕最终停留在哪一页。首先计算手指在屏幕上的停留时间deltaT,如果deltaT<300ms,则认为是快速滑动,相反则是慢速滑动,快速滑动和慢速滑动的处理是不同的:
(1)如果是快速滑动,则让当前页面完整的停留在屏幕中央(需要计算当前页面还有多少需要滑动)
(2)如果是慢速滑动,还需要判断手指在屏幕上滑动的距离,如果滑动的距离没有超过屏幕宽度50%,则要回退到上一页,相反则要停留在当前页面