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

设计思路:

  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. 如何选择数据分析工具?BI工具需要具备哪些功能?

    数据分析使企业能够分析其所有数据(实时,历史,非结构化,结构化,定性),以识别模式并生成洞察力,以告知并在某些情况下使决策自动化,将数据情报与行动联系起来.当今最好的数据分析工具解决方案支持从访问.准 ...

  2. 8.7考试总结(NOIP模拟)[Smooth·Six·Walker]

    前言 踩了挺多以前没踩过的坑... T1 一开始是打了一个 60pts 的 DFS ,在与暴力拍了几组数据保证正确性之后, 突然想到 BFS 可能会更快一些,然后就又码了一个 BFS,又和 DFS 拍 ...

  3. AuthorizationFailed""The client '***' with object id '***' does not have authorization to perform action 'or the scope is invalid. If access was recently granted, please refresh your credentials

    Warning  SyncLoadBalancerFailed  4m9s (x11 over 29m)   service-controller  Error syncing load balanc ...

  4. Spring IOC容器核心流程源码分析

    简单介绍 Spring IOC的核心方法就在于refresh方法,这个方法里面完成了Spring的初始化.准备bean.实例化bean和扩展功能的实现. 这个方法的作用是什么? 它是如何完成这些功能的 ...

  5. CYPEESS USB3.0程序解读之---GPIO

    CPRESS 官方给出的SDK1.1中(目前最新的SDK),提供了大量的例程供我们开发软件的时候作参考,就像STM32的开发一样提供了库一样,但是又不是库,仅仅是参考例程. 首先看一个简单一点的GPI ...

  6. 用notepad2代替notepad

    Windows自带的notepad.exe功能比较弱,notepad2是一个比较好的替代方案,但在任何系统调用notepad的时候都能用notepad2代替并不是一件容易的事,下面是一个解决方法: h ...

  7. PHPMailer 远程命令执行漏洞 Writeup

    漏洞概述 1.漏洞简介 PHPMailer 小于5.2.18的版本存在远程代码执行漏洞.成功利用该漏洞后,攻击者可以远程任意代码执行.许多知名的 CMS 例如 Wordpress 等都是使用这个组件来 ...

  8. MATLAB—面向复数和数组的基本运算

    文章目录 一.MATLAB基本运算说明 二.面向复数的计算特点 1.基础知识 2.对复数的基本操作 3.复数的开方问题 二.面向数组 1.数组的输入形式 2.对矩阵中的元素进行并行操作 3.利用数组运 ...

  9. Oracle11 创建表空间、创建角色及导入

    针对日常工作中经常使用命令创建表空间,导入数据,特此记录下(windows环境下),记录中的testSpaceName是表空间名称,testUserName是用户名,userPwd 是用户密码. 1. ...

  10. Java实现WebSocket服务

    一.使用Tomcat提供的WebSocket库  Java可以使用Tomcat提供的WebSocket库接口实现WebSocket服务,代码编写也非常的简单.现在的H5联网游戏基本上都是使用WebSo ...