js中如果我用一个按钮去触发定时器,那么多次点击这个定时器会越来越快,这是为何?

js中如果我用一个按钮去触发定时器,那么多次点击这个定时器会越来越快,这是为何?

阅读 7.3k
6 个回答

因为点一次开一个定时器吧 就看起来越来越快

并不是越来越快, 而是越来越多;

$('button:first').click(function(){
    // 记录ID
    var timerId = setInterval(function(){
        console.log('Do something...');
    }, /*3s间隔*/3000);
    
    // 猜测可能是少了这两步骤, 你也可以用别的方法记录timerId
    // 清空原来的定时器
    // 记录新的定时器
    clearInterval($(this).attr('data-timer-id'));
    $(this).attr('data-timer-id', timerId);
});

点击一次之后先清除一次定时器,你上次的秒数还没走过,你下一次就开始了,我们应该防抖和节流一下

定时器是异步的,不会按照你预想的顺序来执行,因此你需要创建一个类来管理定时器的顺序,参考我写的这篇文章就是如此做的:
https://segmentfault.com/a/11...

那你的代码一定是在按钮点击事件触发定时器之后没有把对应的函数绑定去掉,导致你每点击一下,就多触发一个定时器,然后给你的感觉就是越来越快,其实是定时器数量越来越多了,这是你自己代码逻辑不严谨,没错,它属于BUG!

你这代码不严谨 应该先执行停止 不管有没有有开启 然后再去执行开启

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏