Javascript clearInterval不工作

Javascript clearInterval不工作,javascript,jquery,Javascript,Jquery,这很可能只是我的语法错误。但是resizeTime就是不清楚。不管多次使用clearInterval,计时器都会继续运行。各位有什么想法吗?我已经发布了我的真实代码: var resizeTime; // declared outside of wrapper function to INSURE no second declaration will occur var myTransitionEvent = whichTransitionEvent(); $(window).bi

这很可能只是我的语法错误。但是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次出现

我认为转换事件没有被触发,但是
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
  • 设置了一个新的超时
  • 现在有两件事情是活动的-一个间隔,一个超时
  • 在超时延迟过去之前,再次触发
    adapt
    事件
  • 设置新的间隔,并将间隔id分配给
    resizeTime
  • 由于
    resizeTime
    被覆盖,上一个间隔的id丢失,但该间隔仍处于活动状态
  • 设置了一个新的超时
  • 现在有4件事情是活动的-2个间隔,2个超时
  • 事情还在继续
  • 1000秒后,假设有20个间隔,20个超时处于活动状态
  • First time out调用函数,并清除resizeTime的第20个值所指的间隔
  • 因此,仍有19次间隔和19次超时处于活动状态
  • 事情还在继续
  • 即使
    transitionevent
    触发,它也只会清除最近的间隔

  • 要使代码正常工作,在每个
    adapt
    事件之后应该有一个
    transitionevent
    ,但没有。因此,我们必须清除活动间隔和活动超时,以便每次只有一个活动间隔,当超时结束时,函数也会清除间隔。

    您有任何错误吗?没有错误,来自我的IDE或浏览器;除了日志中的数千次“go”之外,我们是否可以获得运行计时器的更详细的代码示例(在
    adapt
    binding中的代码在启动和清除间隔时工作正常)您确定没有调用这段代码的循环(导致重新配置间隔)。我想说的是,你确定绑定只调用了一次吗?@JuicyScript'adapt'正在启动,我可以在日志中看到它。这是jQuery环岛的一个mod,它允许一个响应性的环岛,通过css3转换来响应父环岛的大小变化。先生,您既是学者又是圣人。这很好,但我还是不明白为什么。变量只声明了一次,那么重复将其设置为间隔如何会导致此问题?难道它不应该自行复位吗?一个变量可以是多个间隔吗?:)。不,它不会自行重置,一次只指向一个。请看编辑,我已经解释过了。谢谢。现在很酷。谢谢你的回答,我刚刚学到了一些关于js的新知识!