2012-08-03 47 views
1

我需要构建一个在x秒后上下滚动的页面。我只需要知道如何在延迟后启动第二个setInterval。或者,如果人们有其他解决方案,我可以为任在x秒后启动第二个setInterval

这里是代码:

setInterval(function() { 
    scrollDown(); 
},8000); 

setInterval(function() { 
    scrollUp(); 
},8000); 

function scrollDown() { 

    $('html, body').animate({ 
     scrollTop: $("#page2").offset().top 
    }, 2000); 
} 

function scrollUp() { 

    $('html, body').animate({ 
    scrollTop: $("#page1").offset().top 
    }, 2000); 
} 
+0

为什么不叫的setInterval在Scrolldown已函数,而不是运行两个定时器?然后再次在scrollUp函数中,如果需要,所以你得到所需的重复 – Dave 2012-08-03 10:28:52

+0

你可以用一个'setTimeout'来做到这一点。看我的[回复](http://stackoverflow.com/a/11795276/448232)。 – 2012-08-03 12:03:20

回答

2

清洁和更精确的只有一个定时器要做到这一点,像这样:

setInterval(scrollDown, 8000); 

function scrollDown() { 
    $('html, body').animate({ 
     scrollTop: $("#page2").offset().top 
    }, 2000); 

    setTimeout(scrollUp, 4000); 
} 

function scrollUp() { 
    $('html, body').animate({ 
     scrollTop: $("#page1").offset().top 
    }, 2000); 
} 
+1

谢谢你的工作! – 2012-08-03 11:10:49

+1

很高兴听到它的工作!不要忘记将您最喜欢的答案标记为“已接受”。 – Deestan 2012-08-03 11:44:40

-1
setInterval(function() { 
    scrollDown(); 
},8000); 

setInterval(function() { 
    scrollUp(); 
},8000 + 2000); 

为了什么它的价值,在上面会有完全相同的效果。但是,对于代码措辞喜欢你的要求,你可以只:

setInterval(function() { 
    scrollDown(); 
},8000); 

setInterval(function() { 
    setInterval(function() { 
     scrollUp(); 
    },8000); 
2000); 
+1

给贬低我的绅士:谨慎解释为什么? – 2012-08-03 10:44:40

+0

我可以告诉你为什么他投票给你,你的回应的第一部分不会做他们第一次同时触发的问题。 – Touchpad 2016-05-18 07:19:00

0

最简单的解决方案,试试这个:

setInterval(function() { 
    scrollDown(); 
},8000); 

setTimeOut(function(){ 
    setInterval(function() { 
     scrollUp(); 
    },8000); 
},1000); 

因为setTimeout函数调用只需一次

0

其他人已经回答了,所以我只会补充一点:

setInterval(function() { 
    scrollDown(); 
}, 8000); 

setInterval(function() { 
    scrollUp(); 
}, 8000); 

是这样的:

setInterval(scrollDown, 8000); 

setInterval(scrollUp, 8000); 

如果您在该匿名函数中所做的全部操作都是调用另一个命名函数 - 您只需传递命名函数,则不需要匿名函数进行回调。

1

您可以使用一个setTimeout,设置本身?

function setNext(up){ 
    setTimeout(function(){ 
    if(up) scrollUp(); 
    else scrollDown(); 
    setNext(!up); 
    }, 8000); 
} 

scrollDown() //first time 
setNext(true); 

声明:我还没有测试过。 (还)

这里的working demo.