您可以通过调用setTimeout
呼叫的形式创建一些滞后来完成此操作。这是对可能重复触发的昂贵操作的典型响应。当发生keyup
时,为100ms(例如)计划一个超时。如果在该100ms内发生另一个keyup
,则取消先前的超时并设置一个新的超时。发生超时时,请执行昂贵的操作。
例如,如果你以前的处理程序是这样的:
function handleKeyUp() {
doThisExpensiveThing();
doThatExpensiveThing();
doAnotherExpensiveThing();
}
...您的新的可能是这样的:
var keyupTimer = 0; // 0 is a safe "no timer" value, setTimeout never returns 0
function handleKeyUp() {
// Have an outstanding call?
if (keyupTimer) {
// Yes, clear it
clearTimeout(keyupTimer);
}
// Set a new call to occur in 100ms
keyupTimer = setTimeout(doExpensiveStuff, 100);
}
function doExpensiveStuff() {
// Clear the timer handle so we know we don't have a call pending
keyupTimer = 0;
// Do the expensive stuff
doThisExpensiveThing();
doThatExpensiveThing();
doAnotherExpensiveThing();
}
@Jimmy:我想我会把它作为读者的练习。 :-)你应该可以直接应用上面的内容。 –
ok thanx T.J.Crowder – Jimmy