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

相关推荐
持续前行3 小时前
vscode 中找settings.json 配置
前端·javascript·vue.js
JosieBook3 小时前
【Vue】11 Vue技术——Vue 中的事件处理详解
前端·javascript·vue.js
安逸点3 小时前
Vue项目中使用xlsx库解析Excel文件
vue.js
一只小阿乐3 小时前
vue 改变查询参数的值
前端·javascript·vue.js·路由·router·网文·未花中文网
小酒星小杜4 小时前
在AI时代下,技术人应该学会构建自己的反Demo地狱系统
前端·vue.js·ai编程
Code知行合壹4 小时前
Pinia入门
vue.js
今天也要晒太阳4735 小时前
element表单和vxe表单联动校验的实现
vue.js
依赖_赖6 小时前
前端实现token无感刷新
前端·javascript·vue.js
hhcccchh6 小时前
学习vue第十三天 Vue3组件深入指南:组件的艺术与科学
javascript·vue.js·学习
zhengxianyi5157 小时前
ruoyi-vue-pro本地环境搭建(超级详细,带异常处理)
前端·vue.js·前后端分离·ruoyi-vue-pro