首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clearInterval不工作

clearInterval不工作
EN

Stack Overflow用户
提问于 2012-02-29 23:22:37
回答 1查看 6.4K关注 0票数 8

这很可能只是我的一个令人沮丧的语法错误。但resizeTime就是不肯说清楚。无论在计时器上多次使用clearInterval,计时器都会继续计时。有什么想法吗?我已经发布了我的真实代码:

代码语言:javascript
复制
  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的示例日志:

代码语言:javascript
复制
  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次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-01 02:51:31

我认为转换事件没有被触发,但是adapt事件被一次又一次地触发。因此,在活动的resizeTime被清除之前,它会发生变化。您可以通过在设置新间隔之前清除间隔来修复它(至少让它变得更好)。

代码语言:javascript
复制
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);

编辑:

发生的事情是

  1. adapt事件触发超时新的间隔被设置,并且分配给resizeTime
  2. A新的超时的间隔id被设置为活动的,因此现在有2件事是有效的-1间隔,1 timeout
  3. Before超时延迟经过,再次

事件触发

  1. 新的间隔被设置,并且分配给

resizeTime的间隔id被覆盖,先前间隔的id丢失,但是该间隔仍然有效被设置为新的超时H224H125因此现在有4件事有效-2间隔,2 timeouts

  1. It 20 on
  2. 在1000s之后,假设有20个间隔,20个超时active
  3. First time out调用函数并清除resizeTime
  4. So的第20个值指向的间隔仍然是19个间隔和19个超时active
  5. 它继续
  6. 即使transitionevent触发,它也只会清除最新的间隔

为了让您的代码正常工作,每个adapt事件后都应该有一个transitionevent,但实际上没有。因此,我们必须清除活动间隔和活动超时,以便一次只有一个活动,当超时结束时,函数也会清除间隔。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9501813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档