就我而言,这很可能只是一个令人沮丧的语法错误。但是resizeTime不会清除。计时器不停地运行,而不管对其使用clearInterval不止一次。大家有什么想法吗?我已经发布了我的真实代码:

  var resizeTime; // declared outside of wrapper function to INSURE no second declaration will occur
  var myTransitionEvent = whichTransitionEvent();

  $(window).bind('adapt', function(){
        console.log('start', resizeTime);
        resizeTime = setInterval(function(){
              console.log('go', resizeTime);
              methods.relayoutChildren.apply(self);
        }, 5);
        setTimeout(function(){
        console.log('sNend', resizeTime);
              clearInterval(resizeTime);
        },1000);

  });

  $('#allies-wrap').bind(myTransitionEvent, function(){
        console.log('end', resizeTime);
        clearInterval(resizeTime);
        methods.relayoutChildren.apply(self);
  });

这是chrome的示例日志:
  start undefined
  start 8215
  (10) go 8218
  start 8218
  start 8221
  (256) go 8224
  (2) sNend 8224
  (9) go 8224
  sNend 8224
  (3) go 8224
  sNend 8224
  (2596) go 8224

对于不了解Chrome日志的用户,(2596)表示2596次出现相同的日志。

最佳答案

我认为Transition事件没有被触发,但是adapt事件却一次又一次被触发。因此,resizeTime会在事件代码被清除之前发生更改。
您可以通过在设置新的间隔之前清除间隔来修复它(至少使它更好)。

clearInterval(resizeTime);
resizeTime = setInterval(function(){
                  console.log('go', resizeTime);
                  methods.relayoutChildren.apply(self);
            }, 5);

clearTimeout(sNendTime);
sNendTime = setTimeout(function(){
              console.log('sNend', resizeTime);
              clearInterval(resizeTime);
        },1000);

编辑:

发生的是
  • adapt事件触发
  • 设置了一个新间隔,并将间隔id分配给resizeTime
  • 设置了新的超时时间
  • 所以现在有2件事处于事件状态-1个间隔,1个超时
  • 在超时延迟过去之前,adapt事件再次触发oj​​it_rli
  • 设置了一个新间隔,并将间隔id分配给resizeTime
  • 由于resizeTime被覆盖,因此丢失了先前间隔的ID,但是该间隔仍处于事件状态
  • 设置了新的超时时间
  • 现在有4件事处于事件状态-2个间隔,2个超时
  • 继续
  • 1000s之后,说有20个间隔,20个超时事件
  • 第一次超时会调用该函数,并清除resizeTime的第20个值所指向的间隔
  • 所以仍然有19个间隔和19个超时处于事件状态
  • 继续
  • 即使transitionevent触发,它也只会清除最新间隔

  • 为了使您的代码正常工作,每个transitionevent事件后都应该有一个adapt,但没有。因此,我们必须清除事件间隔和事件超时,以使每次一次只有一个事件间隔,并且当超时结束时,该功能也会清除间隔。

    关于javascript - clearInterval不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9501813/

    10-13 01:03