我有一个div,每隔5秒使用一个区间跳动。Javascript - 可以检查一个间隔是否已经设置?
当滚动到页面底部时,该div淡出并且间隔被清除。
但是,我认为有一个问题,间隔被创建多次,并在自身重叠。
有没有办法检查是否设置了间隔,如果清除了,如果没有,设置它?
我需要清除间隔的原因是因为jquery的弹跳效果导致div再次出现,即使它隐藏了。
JSBIN:http://jsbin.com/ijuhok/4/
我有一个div,每隔5秒使用一个区间跳动。Javascript - 可以检查一个间隔是否已经设置?
当滚动到页面底部时,该div淡出并且间隔被清除。
但是,我认为有一个问题,间隔被创建多次,并在自身重叠。
有没有办法检查是否设置了间隔,如果清除了,如果没有,设置它?
我需要清除间隔的原因是因为jquery的弹跳效果导致div再次出现,即使它隐藏了。
JSBIN:http://jsbin.com/ijuhok/4/
你需要覆盖现有的间隔,这样就可以从任何地方清除:http://jsbin.com/ijuhok/5/。
$j("#more").fadeIn('slow',function(){
ResInterval = window.setInterval(bounceMore, 5000);
// no "var"
});
可以消除$(document).ready
为window
,因为它始终可用。
你的问题是,你在一个局部范围界定ResInterval
,因为你使用var
:
$j("#more").fadeIn('slow',function(){
var ResInterval = window.setInterval('bounceMore()', 5000);
});
取出var
前缀,你的代码将如预期:目前,ResInterval
是fadeIn
中的回调函数的局部varibale。当省略var
时,间隔将被分配到最近的ResInterval
声明(使用var
)。
嗯,确切地说 - 谢谢你的解释,尤其是把我的注意力集中在变量的范围上。 – waffl
我在下面做了这个,我的问题解决了。当你清除计时器时,你应该设置值为“假”。
var timeer=false;
----
----
if(timeer==false)
{
starttimer();
}
-----
-----
function starttimer()
{
timeer=setInterval(activefunction, 1000);
}
function pausetimer()
{
clearTimeout(timeer);
timeer=false;
}
哇!你太快了,我甚至不能接受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