背景:一些业务场景须要对比方辨认二维码的长按事件进行上报、具体用处因业务而异
思路:个别二维码扫描机会在长按后600ms內触发,以600ms为绝对工夫进行计算
常见api:
@touchstart // 手指触摸手机屏幕时触发
@touchmove // 手指在手机屏幕挪动时触发
@touchend // 手指来到手机屏幕时触发
@touchcancel // 零碎勾销touch事件的时候触发,比方电话
@click // 点击时触发
执行程序
- touchstart > touchmove > touchend > click
- touchmove 与 click事件互斥,即touchmove触发执行,click事件不再执行
- touchend 和 touchcancel实践上不会同时触发
实现形式: - 在touchstart事件中获取以后工夫戳
-
在touchmove事件中做判断,
- 定义规定:在该办法内获取以后工夫戳 减去 在touchstart事件中取到的工夫戳
- 与600ms做大小判断
- 在touchmove事件中 通过在touchstart事件中定义的办法进行判断、如果小于600ms就 将touchstart事件中获取的工夫戳置为0
-
在touchend中判断
-
touchstart事件中获取的工夫戳 与 在touchmove事件中定义的规定 为true
- 此时上报你想要的货色
-
- 在 touchcancel上报
附代码:
<template>
<div>
<!-- 长按辨认二维码 -->
<img
:src="url"
@touchstart="touchstart()"
@touchmove="touchmove()"
@touchend="touchend()"
@touchcancel="touchcancel()">
</div>
</template>
<script>
// data
data () {
return {
startTime: 0, // 用户按下的时候工夫戳
endTime: 0, // 用户手抬起时的工夫戳
touchTime: 600, // 长按毫秒工夫
isMove: false
}
}
// methods
// 模仿h5长按事件. 相干参数默认已定义
touchstart () {
this.startTime = new Date().getTime()
},
touchmove () {
if (this.isMove) return
this.isMove = true
if (!this.timeDiff()) {
this.startTime = 0
}
},
touchend () {
if (this.startTime && this.timeDiff()) {
this.recordLog('上报touchend')
}
this.isMove = false
},
touchcancel () {
this.recordLog('上报touchcancel')
this.isMove = false
},
timeDiff () {
let timeDiff = new Date().getTime() - this.startTime
let isSend = timeDiff >= this.touchTime
return isSend
},
recordLog (val) {
console.log('这里是上报的信息', val)
}
</script>
发表回复