大ga吼! 很久没写博客咯,今天学到了一点新知识, 记录分享一下~
摘要: 小程序中的函数节流
场景: 从商城列表进入商品详情中时,或者生成,提交订单, 付款的时候, 若用户快速点击(一秒8键,母胎solo20年),则容易造成重复进入页面/生成多余订单/重复付款等等不符合实际需求的麻烦,所以作为一个优秀的web前端开发工程师(主要是产品经理比比了),需要避免这种情况!(谁tm没事一秒8键啊????????????)
/****具体场景自己脑补****/
干货:
这里提出两种解决办法:
Fn1: 在data中设置一个变量flag,默认值为true, 点击时先取出 flag, let _flag = this.data.flag,然后将flag 取false,this.setData({ flag: false}) 再根据 _flag 的值,决定是否执行业务逻辑。对了, 最后千万别忘了在 onload 或者 onshow 或者 onunload 的时候,将 flag 取 true, 这样才能保证在业务逻辑的正常执行, 要不然的话, 代码将成为一次性代码,点一次之后后面就不再执行咯。
此种方法可满足大部分场景, 但是不够优雅, 而且缺点也很明显, 就是必须退出或卸载此页面时, 才能执行第二次业务逻辑, 所以有些场景可能不适应, 再来看第二种解决办法。
Fn2: 第二种方法就是使用函数节流,什么叫节流自己百度下,不费多少电。
直接贴代码:
data: {
pre: 0,
},
throttle (fn, delay = 2000) {
let pre = this.data.pre // 初始值是 0
let that = this
return function () {
let now = + new Date();
if(now - pre >= delay) {
fn.apply(this, arguments)
that.setData({
pre: now
})
}
}
},
toDetail () {
this.throttle(function(){
wx.navigateTo({
url: ‘../carDetail/carDetail?id=‘ + 100040
})
}, 2000)()
},
代码就是这么回事, 照抄准没错, 我快下班了, 下次有时间了再写点注释。。。。。