用例
目前我正在为达到这个目的而进行300ms的淘汰。
handleSwitchKeyEvent: function() {
if (this.pendingLoad) {
// Still pending continue to debounce
clearTimeout(this.pendingLoad);
fn = this.loadContent;
} else {
// No longer pending - So load data immediately
this.loadContent();
}
// Delay the load
this.pendingLoad = setTimeout(function () {
clearTimeout(this.pendingLoad);
this.pendingLoad = 0;
fn && fn.call(this);
}, 300);
}
问题
我想避免这种M2负载。我不确定是否有可能在同一流程中混合debouce和non-debounce
答案 0 :(得分:1)
而不是“debounce”你可能正在寻找一些启动超时的东西,并在调用传入的最后一个参数的函数之前等待一段设定的持续时间。这是一个快速缓慢的缓冲函数(未经测试):< / p>
function buffer( fn, duration ) {
// Store a timeout id and last args called with
var buffer;
var lastArgs;
return function( ) {
// The last args will be used
lastArgs = arguments;
// If buffer hasn't started, kick it off
if (!buffer) {
buffer = setTimeout(function() {
// After duration, call the function with args
// Reset buffer
fn.apply(null, lastArgs);
buffer = null;
}, duration);
}
}
}
编辑:忘记清除缓冲区变量