移动端 uni-app 滑动事件 精确判断手指滑动方向

Posted 前端菜鸡儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动端 uni-app 滑动事件 精确判断手指滑动方向相关的知识,希望对你有一定的参考价值。

移动端根据手指滑动操作判断滑动方向

 

设计思路:

  1.根据移动端touchstarttouchend方法获取手指触摸屏幕的开始坐标和结束坐标

  2.根据两个坐标计算与水平方向的夹角

  3.根据夹角判断当前移动的方向

具体实现:

 

1.获取开始和结束坐标
1 /* 移动开始 */
2 handletouchstart(event) {
3     //event.changedTouches[0].clientX; 移动的x轴坐标
4     //lastY = event.changedTouches[0].clientY; 移动的y轴坐标
5     this.last = event.changedTouches[0];
6 },

ps:移动结束获取坐标和移动开始获取坐标方式相同
2.根据获得的坐标计算与水平轴的夹角

这里我们用到了Math.atan2方法。

atan2 方法返回一个 -pipi 之间的数值,表示点 (x, y) 对应的偏移角度。这是一个逆时针角度,以弧度为单位,正X轴和点 (x, y) 与原点连线 之间。注意此函数接受的参数:先传递 y 坐标,然后是 x 坐标。

  

 1 /* 获取滑动直线与水平线的夹角 */
 2 getLineAngle(x1, y1, x2, y2) {
 3     var x = x1 - x2,
 4     y = y1 - y2;
 5     if (!x && !y) {
 6         return 0;
 7     }
 8     var angle = (180 + Math.atan2(-y, -x) * 180 / Math.PI + 360) % 360;
 9     return 360 - angle;
10 },

3.根据夹角判断滑动方向

到这里我们就可以得到手指在屏幕之间滑动得到的角度。

 

 我们可以看到 第一个打印是手指向下滑动,第二个是向右滑动,第三个是向左滑动,第四个是向上滑动。

 

 如图:我们的坐标是逆袭向排列的,所以我们就可以根据得到的夹角判断是向上还是向下滑动。

注意:因为我们是根据移动开始和结束做的角度计算,但是有一种情况当移动距离过短很有可能计算出来的角度等于0,90,180,270,360,所以做判断时排除一下这五个角度。当然了移动的方向不可能是水平和垂直的我们可以做一个容错区间来判断。

 

 

 

 

至此我们就可以精确的判断手指滑动的方向!

以上是关于移动端 uni-app 滑动事件 精确判断手指滑动方向的主要内容,如果未能解决你的问题,请参考以下文章

《移动端浏览器Touch事件判断手指滑动方向方法》

浅谈移动端之touch事件--手指的滑动事件

浅谈移动端之touch事件--手指的滑动事件

移动端手指滑动事件

移动端判断手指向上滑动还是向下滑动

uni-app 手指左右滑动实现翻页效果