如何只触发最后一个setTimeout

时间:2013-06-16 00:36:36

标签: javascript

window.addEventListener('resize', onResize, false);
function onResize() {
    timer = setTimeout(function() { 
        console.log('fire timer');
    }, 1000);
}

调整事件的速度超级快。因此每1000ms会有很多计时器点火。如何只开始最后一个计时器?

2 个答案:

答案 0 :(得分:8)

清除每次通话的计时器

var timer;

function onResize() {

    clearTimeout(timer);

    //...

    timer = setTimeout(function() { 
        console.log('fire timer');
    }, 1000);
}

timer可能为null或未定义。)

答案 1 :(得分:2)

如果您已经使用了underscore.js,则可以使用debounce方法来满足此需求:

  

创建并返回传递函数的新debounced版本,该函数将推迟执行,直到自上次调用之后经过等待毫秒。用于实现仅在输入停止到达之后发生的行为。