900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 移动端js触摸touch详解(附带案例源码)

移动端js触摸touch详解(附带案例源码)

时间:2020-10-15 16:01:49

相关推荐

移动端js触摸touch详解(附带案例源码)

移动端触摸滑动原理详解案例,实现过程通过添加DOM标签的触摸事件监听,并计算触摸距离,通过距离坐标计算触摸角度,最后通过触摸角度去判断往哪个方向触摸的。

触摸的事件列表

触摸的4个事件:

touchstart 触摸屏幕上时触发

touchmove 触摸屏幕中滑动时触发

touchend 离开屏幕时触发

touchcancel 系统取消触摸事件的时候触发

监听触摸后触摸事件会实现一个event对象,这个对象里面包括3个触摸函数列表。

触摸事件里的3个函数:

touches 屏幕上所有手指列表

targetTouches 在当前DOM标签上手指的列表

changedTouches 涉及当前事件的手指的列表

触摸函数的属性,用于获取坐标

8个属性:

clientX 触摸目标在浏览器中的x坐标

clientY 触摸目标在浏览器中的y坐标

identifier 标识触摸的唯一ID。

pageX 触摸目标在当前DOM中的x坐标

pageY 触摸目标在当前DOM中的y坐标

screenX 触摸目标在屏幕中的x坐标

screenY 触摸目标在屏幕中的y坐标

target 触摸的DOM节点目标。

Math.atan2()函数,计算角度的弧度值

angel=Math.atan2(y,x)

x 指定点的 x 坐标

y 指定点的 y 坐标

angel是一个弧度值(可以比喻为直角三角形对角的角,其中 x 是邻边边长,而 y 是对边边长)

atan2(x,y)*180/Math.PI 转换为角度

触摸详细代码:

<html><head><meta charset="utf-8"/><title>touch test</title></head><body><div id="box" style="width:100%;height:100%;border:1px solid red;"></div><script>//定义变量,用于记录坐标和角度var startx,starty,movex,movey,endx,endy,nx,ny,angle;//开始触摸函数,event为触摸对象function touchs(event){//阻止浏览器默认滚动事件 event.preventDefault();//获取DOM标签var box = document.getElementById('box');//通过if语句判断event.type执行了哪个触摸事件if(event.type=="touchstart"){console.log('开始');//获取开始的位置数组的第一个触摸位置var touch = event.touches[0];//获取第一个坐标的X轴startx = Math.floor(touch.pageX);//获取第一个坐标的X轴starty = Math.floor(touch.pageY);//触摸中的坐标获取}else if(event.type=="touchmove"){console.log('滑动中');var touch = event.touches[0];movex = Math.floor(touch.pageX);movey = Math.floor(touch.pageY);//当手指离开屏幕或系统取消触摸事件的时候}else if(event.type == "touchend" || event.type == "touchcancel"){//获取最后的坐标位置endx = Math.floor(event.changedTouches[0].pageX);endy = Math.floor(event.changedTouches[0].pageY);console.log('结束');//获取开始位置和离开位置的距离nx = endx-startx;ny = endy-starty;//通过坐标计算角度公式 Math.atan2(y,x)*180/Math.PIangle = Math.atan2(ny, nx) * 180 / Math.PI;if(Math.abs(nx)<=1 ||Math.abs(ny)<=1){return false;console.log('滑动距离太小');}//通过滑动的角度判断触摸的方向if(angle<45 && angle>=-45){alert('右滑动');return false;}else if(angle<135 && angle>=45){alert('下滑动');return false;}else if((angle<=180 && angle>=135) || (angle>=-180 && angle<-135 )){alert('左滑动');return false;}else if(angle<=-45 && angle >=-135){alert('上滑动');return false;}}}//添加触摸事件的监听,并直行自定义触摸函数box.addEventListener('touchstart',touchs,false);box.addEventListener('touchmove',touchs,false);box.addEventListener('touchend',touchs,false);</script></body></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。