2011-10-31 80 views
3

我有一个div,每隔5秒使用一个区间跳动。Javascript - 可以检查一个间隔是否已经设置?

当滚动到页面底部时,该div淡出并且间隔被清除。

但是,我认为有一个问题,间隔被创建多次,并在自身重叠。

有没有办法检查是否设置了间隔,如果清除了,如果没有,设置它?

我需要清除间隔的原因是因为jquery的弹跳效果导致div再次出现,即使它隐藏了。

JSBIN:http://jsbin.com/ijuhok/4/

回答

4

看来你设定的时间间隔时,它滚动。所以,如果我向下滚动,然后再次向下滚动,则将其设置两次。

每次设置它时,请事先清除它,你应该没问题。

http://jsbin.com/ijuhok/6

4

你需要覆盖现有的间隔,这样就可以从任何地方清除:http://jsbin.com/ijuhok/5/

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

可以消除$(document).readywindow,因为它始终可用。

+0

哇!你太快了,我甚至不能接受6分钟以上的答案。完美,谢谢! - 并且感谢所有其他人提供快速且完美的解决方案 - 这绝对是因为我们一直用'var'重新定义。 – waffl

+0

好吧有一些非常奇怪的事情发生,如果你离开网站闲置一分钟左右, div似乎失去了定位并移动到屏幕的顶部。你有什么想法发生了什么? http://dl.dropbox.com/u/396112/_IMG/_misc/setinterval-bounce.jpg(OS X 10.7.2,Chrome 15.0.874.106) – waffl

+0

@waffl:我不知道为什么,但重置了CSS属性设置似乎我的工作:http://jsbin.com/ijuhok/7/。 – pimvdb

1

你的问题是,你在一个局部范围界定ResInterval,因为你使用var

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

取出var前缀,你的代码将如预期:目前,ResIntervalfadeIn中的回调函数的局部varibale。当省略var时,间隔将被分配到最近的ResInterval声明(使用var)。

+0

嗯,确切地说 - 谢谢你的解释,尤其是把我的注意力集中在变量的范围上。 – waffl

0

我在下面做了这个,我的问题解决了。当你清除计时器时,你应该设置值为“假”。

var timeer=false; 
---- 
---- 
if(timeer==false) 
{ 
    starttimer(); 
} 
----- 
----- 
function starttimer() 
{ 
    timeer=setInterval(activefunction, 1000); 
} 

function pausetimer() 
{ 
    clearTimeout(timeer); 
    timeer=false; 
} 
相关问题