在项目开发中,经常会遇到希望函数在,触发Ns后执行,如果不足N秒,不执行,类似于电路中,处理按钮开关时,电平并非完全的0 1 电平,而是有波峰抖动,需要消除抖动,在按下N秒后,执行,不足N秒不执行。非常有用,类似于angular的ng-model-option={“debounce”:30}
debounce函数:
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced () {
var obj = this, args = arguments;
function delayed () {
if (!execAsap)
func.apply(obj, args);
timeout = null;
};
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || 100);
};
}
其中debounce 接受 3 个参数,后两个可选;第一个是要 debounce 的函数, 第二个代表 debouce 的时间间隔,第三个在时间段的开始还是结束执行函数。
可以处理,类似于,mouseenter 弹出一个对话框,直接触发太突兀,因为有时,客户只是鼠标偶然移动上去,没有必要弹出,使用debounce函数,在移动上去600ms后,弹出,不足600ms,不弹出,即可。