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

设计思路:

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

  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 方法返回一个 -pi 到 pi 之间的数值,表示点 (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,所以做判断时排除一下这五个角度。当然了移动的方向不可能是水平和垂直的我们可以做一个容错区间来判断。

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

优化

思路:

我们可以在添加手指滑动的时间和滑动的距离来加强手指滑动的操作

1.在touchstart滑动开始时记录当前时间,在滑动结束时获取当前时间,根据时间差来增强判断

1 let noeTime = Date.now() - this.lastTime;
2 console.log(noeTime, 'noetime');

2.根据滑动距离来增强判断

1 /* 判断移动距离 */
2 let distance = event.changedTouches[0].clientX - this.last.clientX;
3 console.log(distance, 'distance');

总结

移动端手指滑动方向,最主要的就是根据滑动开始和滑动结束两个坐标,来计算两个坐标生成的直线与水平方向的角度,以此来判断移动的方向。
为了增强用户体验和程序的稳定,我们可以增加手指滑动的时间和距离来增强判断。

  大功告成!!!有不明白的欢迎留言交流!

  

  

移动端 uni-app 滑动事件 精确判断手指滑动方向的更多相关文章

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

    $("body").on("touchstart", function(e) {     e.preventDefault();     startX = e. ...

  2. 对于移动端浏览器touch事件的研究总结(4)判断手指滑动方向

    最近有一些微信的项目,虽然页面很简单,但配合手势后的效果却是很不错的.最基本的效果就是手指向上滑,页面配合css3出现一个展开效果,手指向下滑将展开的内容按原路径收起.其实就是一个简单的判断手指滑动方 ...

  3. jquery判断手指滑动方向

    jquery判断手指滑动方向 <pre> /*判断哪个滑动方向还是自己改下 要么上下 要么左右*/ var startX; var startY; $(".shanghua&qu ...

  4. 关于dom节点绑定滑动事件导致浏览器上下滑动失效解决方案--黄丕巧

    1.移动端开发往往需要添加一下自定义的左右滑动事件,但是添加了左右滑动事件之后就要阻止浏览器大默认事件,否则dom节点的滑动事件和浏览器本身的滑动会出现冲突,导致滑动的时候会出现消失瞬间再出现的效果 ...

  5. js判断手指滑动方向(移动端)

    var startx, starty; //获得角度 function getAngle(angx, angy) { return Math.atan2(angy, angx) * 180 / Mat ...

  6. 移动端touchstart、touchmove事件的基本使用

    在pc端,我们通常使用$(window).scroll()事件来监听元素的位置,来做一些入场动效,如: $(window).scroll(function(){ var panel3Move = do ...

  7. RecycleViewScrollHelper--RecyclerView滑动事件检测的辅助类

    目录 概述 这是一个关于RecycleView滑动事件的辅助类,该辅助类可以检测RecycleView滑动到顶部或者底部的状态. 可用于实现RecycleView加载更多或者刷新(虽然刷新可以直接用S ...

  8. Android 解决Gallery下ScrollView滑动事件冲突

    在Gallery下,里面内容过长超出屏幕,这时我们可以用ScrollView来滚动,但是这样做了以后,会发现一个问题,Gallery的滑动事件和ScrollView的滑动事件起冲突,这时我们可以自定义 ...

  9. 原生js移动端滑动事件

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

随机推荐

  1. linux删除命令

    Linux下的命令,删除文件夹下的所有文件,而不删除文件夹本身rm -rf *

  2. yaml 文件解析

    前言 yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时都会原样输出,yam ...

  3. Python基础之用PyQt5界面代码分离以及自定义一个槽函数

    最近开发一个项目,需要用到界面,遇到界面不能实时更新的问题,看到网上很多用槽函数,但是大多都是些button的,并不是我需要的,要么就是整数的,后来自己进行尝试,写了一个自定义的槽函数处理treewi ...

  4. 【LeetCode】204.计数质数

    问题描述: 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 这是一道简单题,但是却并没有那么直 ...

  5. 一文彻底弄懂cookie、session、token

    前言 作为一个JAVA开发,之前有好几次出去面试,面试官都问我,JAVAWeb掌握的怎么样,我当时就不知道怎么回答,Web,日常开发中用的是什么?今天我们来说说JAVAWeb最应该掌握的三个内容. 发 ...

  6. SaltStack 命令注入漏洞(CVE-2020-16846)

    SaltStack 是基于 Python 开发的一套C/S架构配置管理工具.2020年11月SaltStack官方披露了CVE-2020-16846和CVE-2020-25592两个漏洞,其中CVE- ...

  7. Java面向对象03——类与对象的创建

    类的创建与初始化对象 age: 以类的方式组织代码,以对象的组织(封装)数据  package oop.demon01.demon02; ​ // 学生类(抽象模板) public class Stu ...

  8. C++ //this 指针的使用 //1 解决名称冲突 //2 返回对象本身 用 *this

    1 //this 指针的使用 2 //1 解决名称冲突 3 //2 返回对象本身 用 *this 4 5 #include <iostream> 6 #include <string ...

  9. .NetCore+OpenSSL实现Https

    前言 最近,有时间研究了一下HTTPS安全通信的原理,感兴趣的同学可以看下上一篇博文深入理解Https如何保证通信安全 ,随即联想到近段时间开发的.NetCore项目,.NetCore API应用程序 ...

  10. Java文件和Java包结构

    Java中的包概念 Java中的包是封装一组类,子包和接口的机制.软件包用于: 防止命名冲突.例如,可以有两个名称分别为Employee的类,college.staff.cse.Employee和co ...