欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 在小程序中做一个单击长按判断

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:502

在小程序中做一个单击长按判断

发布时间:2020-10-28  
事情的起源

在做项目的过程中,遇到这么一个需求:轻按按钮,事件触发一次,长按按钮,则事件需要不停的触发,微信没有提供这个方法,需要开发者自身去完成。

 

逻辑分析

当按钮按下, 此时获取得到按下的时间戳和一个按钮的状态, 写入this.data里面, 写入成功后, 开启一个递归函数, 首先是得到当前时间戳, 取出开始的时间戳, 二者做对比, 当大于设定值如200毫秒, 则为长按时间, 若小于, 则为单击事件, 当按钮松开, 改变按钮状态, 清除计时器.

 

代码实现

 

touchStart: function(e){

let timeStart = this.getTime();

let isTouch = true;

this.setData({timeStart, isTouch}, this.getNum)

}

 

touchEnd: function(){

this.setData({ isTouch: false }, this.getNum)

}

 

getNum: function(){

let { timeStart, isTouch } = this.data;

let timeNow = this.getTime();

let timeNum = 200;

let num = timeNow - timeStart;

let touchType = num < timeNum ? '单击': '长按';

if(isTouch){

// fnc 执行想要做的事

this.timer = setTimeout(this.getNum, 100)

}

else{

clearTimeout(this.timer)

}

}

 

getTime: function(){

let time = new Date()

return time.getTime()

} //获取当前时间的毫秒数

 

微信小知识

this.setData为一个异步函数, 如果有业务需要当数据写入成功后执行的话,可以使用这个方法来执行  this.setData({}, cb) cb 为回调函数

 

BUG修改

虽然按照以上情况能实现预期效果,但是还不够完美,经过实测,当快速点击并松开(在100ms内),想要执行的函数并不会触发,为了能兼容这种情况,我做出了一点改变,添加了一个bindtap函数,并在添加一个状态来判断是否触发执行函数

 

//bindtap 函数

tap: function(){

let { isSend } = this.data

if(!isSend){

// fnc 执行函数

}

}

 

//getNum 做适应性改变

getNum: function(){

let { timeStart, isTouch, isSend } = this.data;

let timeNow = this.getTime();

let timeNum = 200;

let num = timeNow - timeStart;

let touchType = num < timeNum ? '单击': '长按';

if(isTouch){

// fnc 执行想要做的事

this.setData({isSend: true }) // 添加的代码

this.timer = setTimeout(this.getNum, 100)

}

else{

clearTimeout(this.timer)

this.setData({ isSend:false }) //添加的代码

}

}

//

因为水平有限,只能通过这种方式来进行修改,如果有更好的方法,欢迎提出意见和建议