收藏
回答

在touchmove事件定义的定时器以及延时器无法清除?

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 工具 8.0.20 2.0.0

https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html

// pages/demo/index.js Page({ /** * 页面的初始数据 */ data: { screenHeight: "", screenWidth: "", }, //触屏事件开始 touchstart(e) { console.log("startTiming:" + timing) console.log("判断moveSetInterval是否存在"+this.moveSetInterval) console.log("判断moveSetTimeout是否存在"+this.moveSetTimeout) this.positionObject = {} const pageX = e.touches[0].pageX const pageY = e.touches[0].pageY const timing = e.timeStamp const startPos = { pageX: pageX, pageY: pageY, timing: timing } this.positionObject.startPos = startPos this.isGetMovePos300s = true//300s只取一次值 this.isMoveTimer = true console.log(this.positionObject) }, //触屏事件移动 touchmove(e) { const timing = e.timeStamp // console.log("move:"+timing) const tx = this if (tx.positionObject.movePos) { if((timing > (tx.positionObject.movePos.timing + 290) && timing < (tx.positionObject.movePos.timing + 310) && tx.isGetMovePos300s)){ const pageX = e.touches[0].pageX const pageY = e.touches[0].pageY const newPos = { pageX: pageX, pageY: pageY, timing: timing } tx.positionObject.newPos = newPos console.log(tx.positionObject) // console.log(tx.positionObject) tx.isGetMovePos300s = false clearInterval(this.moveSetTimeout) this.moveSetTimeout = null tx.getMovePos300s() } }else if (timing > (tx.positionObject.startPos.timing + 290) && timing < (tx.positionObject.startPos.timing + 310) && tx.isGetMovePos300s) { const pageX = e.touches[0].pageX const pageY = e.touches[0].pageY const movePos = { pageX: pageX, pageY: pageY, timing: timing } tx.positionObject.movePos = movePos // console.log(tx.positionObject) tx.isGetMovePos300s = false tx.getMovePos300s() } }, //每300s获取 getMovePos300s() { const tx = this //分别用两种计时器执行 // ①定时器 // clearInterval(tx.moveSetInterval) // tx.moveSetInterval = setInterval(() => { // console.log("isMoveTimer:"+tx.isMoveTimer) // if(tx.isMoveTimer){ // tx.isGetMovePos300s = true // console.log(tx.positionObject) // }else{ // console.log("清除定时循环") // clearInterval(tx.moveSetInterval) // tx.moveSetInterval = null // return // } // }, 300); // ②延时器 tx.moveSetTimeout = setTimeout(function () { if (tx.isMoveTimer) { console.log(tx.positionObject) tx.isGetMovePos300s = true tx.getMovePos300s() } else { clearTimeout(tx.moveSetTimeout) console.log("停止延时循环") return } }, 300) }, culculatePos(){ }, //触摸动作结束 touchend(e) { const timing = e.timeStamp console.log("endTiming:" + timing) this.isMoveTimer = false if (this.moveSetInterval) { console.log("moveSetInterval 定时器在!!!") clearInterval(this.moveSetInterval) this.moveSetInterval = null } if (this.moveSetTimeout) { console.log("moveSetTimeout 延时器在!!!") clearInterval(this.moveSetTimeout) this.moveSetTimeout = null } }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { const { screenHeight, screenWidth, } = wx.getSystemInfoSync(); this.data.screenHeight = screenHeight; this.data.screenWidth = screenWidth; }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })
回答关注问题邀请回答
收藏

1 个回答

登录 后发表内容