vue如何实现触摸板双指滑动(非长按滑动)

引入:模仿idea中文网站时,里面出现的一个轮播图,既可以通过按钮点击来实现图片的切换,也可以通过双指滑动来实现切换

我首先实现的是按钮点击来实现图片切换,@click来监听两个按钮

具体代码如下,不过多赘述

接下来写的即是触摸板滑动功能

一开始我写的只有@touchsart和@touchend,以此监听触摸板的滑动,代码如下,这个兼容性比较强,在手机上也可以实现滑动,但是在PC端,只能通过检查,再点击触摸板后滑动才能实现图片切换,具体原因暂时还不清楚。

所以在后面我添加了@mousewheel监听事件,这个方法是监听鼠标滚轮事件,而两个手指滑动触摸板就相当于鼠标滚动事件;

而当鼠标滚轮滚动的时候,e.wheelDeltaX的值会变化,就意味着有了滚动,滚动值最后为负值是向右滚动了,滚动值最后为负值是向左滚动了,以此来写函数changeTouch;

通过使用changeTouch方法调用左右切换,但同时也会出现一个问题,changeTouch被调用了多次,这是由于e.wheelDeltaX的值会多次变化,滚动一小点就会调用changeTouch一次,这个时候想到的就是节流函数throttle了;

提出疑问:为什么节流函数一开始要在组件创建时调用,而不是在toMousewheel里面直接使用节流,换句话说,为什么要在created里面调用changeTouch去节流,而不是去toMousewheel里面节流?

回答:一开始写的时候是在调用节流函数时,直接让节流函数调用changeTouch,从而执行了一次,如下【错误写法】

在toMousewheel方法里,直接调用了this.changeTouch(e),这就使得changeTouch方法会被立即执行,而不是被节流,为什么?

因为changeTouch有参数,加了括号传参,当我们去调用有括号传参的函数时就是被执行了,但changeTouch不能被执行,只能被调用;正确的做法应该是把changeTouch函数本身传递给throttle函数,而非调用它的返回值,所以在created的时候赋值一个新变量,这个变量不是函数,所以不会被调用执行,即只会被调用而不会执行;

综上,节流函数第一参数的函数只能被调用,不能被执行,你可以填写函数名,但是不可以填函数名+括号(实际上是在立即执行这个函数),更不能填函数名+括号里面传参(这个时候这个函数会被立即执行,并且它的返回值【而不是函数本身】会被传递给throttle,这显然不是我们想要得,因为我们希望throttle在合适的时机调用函数,而不是立即执行它);

而对于这个toMousewheel方法里,我们直接去写就可以实现触摸板的双指滑动了,没有用到@touchsart和@touchend,把这两个代码保留的好处:这两个是触摸事件,手机端有触摸滑动事件,【有些电脑的触摸板支持"双击滚动"功能,即先用手指再触摸板上快速点击两次,双击后,触摸板会进入滚动模式,然后用户可以移动手指来模拟鼠标滚轮的滚动操作】,我这个要在检查的时候才可以实现电脑的触摸板"双击滚动功能",具体原因暂时不知;所以保留可以让手机端也能够实现滑动功能。

拓展:(touchstart和mousewheel的区别)

touchstart是触摸事件,属于移动端或触摸设备的输入事件,用于处理触摸操作的初始阶段,例如要做PC端长按类型(长按复制、长按语音)【上面不用到touchstart是因为上面本质是滚轮事件,而不是长按事件,而移动端的长按滑动和滚轮有点类似,这种时候就不用多写一个滚轮事件了】;

mousewheel是鼠标事件,属于桌面端鼠标设备的输入事件。用于处理鼠标滚轮滚动事件,例如控制页面滚动、缩放内容或如上功能。

相关推荐
正一品程序员6 小时前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
star_11126 小时前
Jenkins+nginx部署前端vue项目
前端·vue.js·jenkins
JIngJaneIL6 小时前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·农产品电商系统
c***72746 小时前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
JIngJaneIL6 小时前
书店销售|书屋|基于SprinBoot+vue书店销售管理设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·书店销售管理设计与实现
一 乐6 小时前
农产品销售|农产品供销|基于SprinBoot+vue的农产品供销系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot
一 乐7 小时前
助农服务系统|基于SprinBoot+vue的助农服务系统(源码+数据库+文档)
前端·数据库·vue.js
by__csdn7 小时前
Vue 2 与 Vue 3:深度解析与对比
前端·javascript·vue.js·typescript·vue·css3·html5
小二·7 小时前
DevUI 和 MateChat:2025 年,我们是怎么把前端开发变轻松的
开发语言·javascript·vue.js
一 乐7 小时前
游戏账号交易|基于Springboot+vue的游戏账号交易系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·游戏