<span class="btn" @touchstart="touchstart()" @touchmove="touchmove()" @touchend="touchend()">按住說話</span>
@touchstart: 觸發按下事件
touchstart() {
event.preventDefault() //阻止默認事件(長按的時候出現復制)
this.startX = event.changedTouches[0].pageX
this.startY = event.changedTouches[0].pageY
}
@touchmove:觸發移動事件,通過x軸y軸移動的距離判斷是左滑又滑
touchmove() { // 如果手指有移動,則取消所有事件,此時說明用戶只是要移動而不是長按
event.preventDefault()
var moveEndX = event.changedTouches[0].pageX
var moveEndY = event.changedTouches[0].pageY
var X = moveEndX - this.startX
var Y = moveEndY - this.startY
if (Math.abs(X) > Math.abs(Y) && X > 0) {
alert('left 2 right')
} else if (Math.abs(X) > Math.abs(Y) && X < 0) {
alert('right 2 left')
} else if (Math.abs(Y) > Math.abs(X) && Y > 0) {
alert('top 2 bottom')
} else if (Math.abs(Y) > Math.abs(X) && Y < 0) {
alert('bottom 2 top')
} else {
alert('just touch')
}
},
touchmove的最后坐標減去touchstart的起始坐標,X的結果如果正數,則說明手指是從左往右划動;X的結果如果負數,則說明手指是從右往左划動;Y的結果如果正數,則說明手指是從上往下划動;Y的結果如果負數,則說明手指是從下往上划動。
但是:
實際上手指在手機上面滑動時很難做到直上直下的滑動;只要稍微有點斜,就會被x軸的判斷現行接管,而與我們的實際操作醫院相背離。此時就需要添加特殊的判斷技巧,代碼如下:
@touchend:觸發結束移動事件 通過事件判斷是否是長按事件
touchend() { // 手釋放,如果在500毫秒內就釋放,則取消長按事件
event.preventDefault()
this.EndTime = new Date().getTime()
this.isRecord = false
if (this.EndTime - this.StarTime < 500) {
this.EndTime = 0
this.StarTime = 0
clearTimeout(this.timeOutEvent)// 清除定時器
alert('取消')
} else {
alert('松手')
wx.stopRecord({
success: function(res) {
alert('localId')
alert(res)
alert(JSON.stringify(res))
this.localId = res.localId
},
fail: function(res) {
alert(JSON.stringify(res))
}
})
}
參考文獻:https://www.cnblogs.com/lijuntao/p/6479972.html
