JavaScript - 是否可以检查是否已设置间隔?

4
我有一个div,使用间隔每5秒反弹一次。
当滚动到页面底部时,这个div会淡出,并清除间隔。
然而,我认为存在多次创建间隔的问题,导致它们相互重叠。
有没有办法检查是否设置了间隔,如果是,则清除它,如果不是,则设置它?
我需要清除间隔的原因是jquery的反弹效果会导致即使隐藏了div,它也会再次出现。
JSBIN: http://jsbin.com/ijuhok/4/
4个回答

4
您需要覆盖现有的间隔,以便在任何地方都可以清除它:http://jsbin.com/ijuhok/5/
$j("#more").fadeIn('slow',function(){
    ResInterval = window.setInterval(bounceMore, 5000);
    // no "var"
});

您可以省略 $(document).ready 对于 window,因为它始终可用。


哇!您太快了,我还需要6分钟才能接受答案。完美,谢谢!-也感谢其他所有人的快速和完美解决方案-这绝对是通过一直使用“var”重新定义导致的。 - waffl
好的,有一些非常奇怪的事情发生了,如果你让网站闲置一分钟左右,div似乎会失去它的定位并移动到屏幕顶部。你知道发生了什么吗?http://dl.dropbox.com/u/396112/_IMG/_misc/setinterval-bounce.jpg(OS X 10.7.2,Chrome 15.0.874.106) - waffl
@waffl: 我不知道为什么,但重置已经设置的CSS属性似乎有效:http://jsbin.com/ijuhok/7/. - pimvdb
哦不,我不喜欢告诉你,但它仍然有问题,很奇怪,不知道为什么:http://dl.dropbox.com/u/396112/_IMG/_misc/Screen%20Shot%202011-11-01%20at%2010.59.47%20AM.png - waffl
@waffl:我瞎搞了一下,这个hack似乎解决了它(在Chrome上):http://jsbin.com/ijuhok/8/edit。 - pimvdb

4
看起来你在滚动时设置了间隔。所以如果我向下滚动,然后再次向下滚动,你就会设置两次。每次设置之前清除它,你应该就没问题了。 http://jsbin.com/ijuhok/6

1

你的问题在于你在本地作用域中定义了 ResInterval,因为你使用了 var

$j("#more").fadeIn('slow',function(){
   var ResInterval = window.setInterval('bounceMore()', 5000);
});

移除var前缀,你的代码将按预期工作:目前,ResIntervalfadeIn回调函数中的局部变量。当省略var时,该间隔将被分配给最近的ResInterval声明(使用var)。

啊,没错 - 感谢您的解释,特别是让我注意到变量的作用域。 - waffl

0
我是这样做的,我的问题解决了。当你清除计时器时,应该将值设置为“false”。
var timeer=false;
----
----
if(timeer==false)
{
  starttimer();  
}
-----
-----
function starttimer()
{
  timeer=setInterval(activefunction, 1000); 
}

function pausetimer()
{
  clearTimeout(timeer);
  timeer=false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接