uni-app实现双击事件

1,391 阅读1分钟

一、功能需求

在uni-app中,很多时候我们需要元素绑定双击事件,比如自定义的视频播放器,双击播放、暂停、显示进度条、隐藏进度条。 但是在uni-app官方并没有提供双击事件,那么就需要我们自己来实现双击事件的逻辑。在双击的时候不能触发单击事件,在单击的时候不能触发双击事件。 在做双击事件的时候,大多数情况下就是使用时间戳来实现,两次点击的时间差小于某一个值是判定为双击事件,否则判定为单击事件。

二、实现代码

html部分

<view @click="maskTouchend"></view>

js部分

export default {
	data(){
		return {
			touchNum : 0,
		}
	},
	methods:{
		maskTouchend(e){
			this.touchNum ++
			setTimeout(()=>{
				if(this.touchNum == 1){
					console.log('单击')
				}
				if(this.touchNum >= 2){
					console.log('双击')
				}
				this.touchNum = 0
			},250)
		}	
	}
}

三、实现思路

  • 其实现原理主要使用的就是setTimeout延时函数的延时执行机制;
  • 当用户点击元素的时候,触发延时函数,延时函数在250毫秒之后执行;
  • 如果用户在250毫秒之内仅仅只点击了一下,那么在延时函数执行之前,touchNum = 1,所以会满足单击的条件,执行单击逻辑;
  • 如果用户在250毫秒之内,点击了两次甚至多次,那么此时延时函数还没有执行,而tocuhNum的值已经大于或者等于2了;
  • 在延时函数执行之前,touchNum的值满足双击的条件,不满足单击的条件,所以不会执行单击事件,而执行双击事件;
  • 在事件处理完成之后再将touchNum的值还原。