一般小程序绑定事件如下<view class="create-page" bindtouchmove="debounceImageMoveIng" bindtouchend="imageMoveEnd">
而正常绑定事件使用防抖函数时需要初始化防抖函数jQuery(window).on('resize', \_.debounce(calculateLayout,150));
我们知道防抖函数是一个函数定义一个timer属性,然后返回一个闭包函数,当你调整浏览器大小或者滚动页面时,执行当就是防抖函数返回的这个闭包函数,而防止频繁执行就是通过timer+setTimeout控制。
function debounce(fn,wait){
var timer = null;
return function(){
if(timer !== null){
clearTimeout(timer);
}
timer = setTimeout(fn,wait);
}
}
function handle(){
console.log(Math.random());
}
window.addEventListener("resize",debounce(handle,1000));
在小程序中如果用 this.timer 代替闭包的timer 那么就不需要额外的闭包函数,也不需要初始化防抖函数。
debounceImageMoveIng: function (e) {
if(this.timer) {
clearTimeout(this.timer)
}
this.timer = setTimeout(()=>{
this.imageMoveIng(e)
},10)
}
错误使用防抖函数的例子
debounceImageMoveIng: function (e) {
// 错误:每次触发事件都只是初始化
debounce(()=>{
this.imageMoveIng(e)
},10)
// 错误:每次触发事件初始化后 都执行,相当于了每次都延迟执行
debounce(this.imageMoveIng,10)(e)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。