Javascript 在两个循环之间切换

Javascript 在两个循环之间切换,javascript,jquery,loops,Javascript,Jquery,Loops,为了进一步了解jQuery,我尝试创建一个函数,该函数将滚动到页面底部,返回顶部,然后在无限循环中重新开始 到目前为止,我已经得到了这个 var scroll = $(document).scrollTop(); setInterval(function(){ scroll += 5; $(document).scrollTop(scroll); }, 10); 这将滚动到页面底部 当它到达底部时,需要设置一个标志,可能var direction=1 其中1为

为了进一步了解jQuery,我尝试创建一个函数,该函数将滚动到页面底部,返回顶部,然后在无限循环中重新开始

到目前为止,我已经得到了这个

var scroll = $(document).scrollTop();

setInterval(function(){
        scroll += 5;
        $(document).scrollTop(scroll);
}, 10);
这将滚动到页面底部

当它到达底部时,需要设置一个标志,可能
var direction=1
其中1为向下,0为向上。
现在我需要添加以下内容

if(direction){
    // scroll down
} else {
    // scroll up
}
因此,IF将不断检查
方向的值,并将
滚动
变量增加+=5或-=5

这听起来合乎逻辑,还是有更简单的方法来实现

编辑

这是一个工作版本的建议


您应该使用jQuerys回调创建一个无限递归函数。只需在animate函数中的声明之后添加一个函数,然后调用同一个函数,但要反转传递的布尔值

此外,动画将做这个增量非常好,顺利为您

function scrollTopOrBottom(top){
    if(top) $("body, html").animate({scrollTop: 0}, function(){
        scrollTopOrBottom(false);
    });
    else $("body, html").animate({scrollTop: $("document").height()}, function(){
        scrollTopOrBottom(true);
    });
}

scrollTopOrBottom(false);
更新:如前所述,这可能会造成**嗯哼**堆栈溢出,但此时的问题与此无关。如果希望安全起见,请在每个
$(“body,html”)
语句之后使用
stop()
,以在另一个调用正在进行时停止调用,从而延迟溢出


注意:您也可以将
if
语句包装在
{}
中,但由于它是一个语句,因此我发现它比类似代码的语句更易读、更像句子。但这是首选项。

您可以将方向的值设置为
1
向下滚动或
-1
向上滚动

然后,更改scroll的值时,您可以执行以下操作:

scroll += 5 * direction;

当然,动画!在此,我不认为setInterval()是正确的方法。请为if/else语句添加括号;)@andybeli这种方式是正确的,但我会提到它。我只是觉得,当执行这一条语句时,我发现它更清晰。。。它的字面意思是
if…else
。我会推迟递归调用,这样就不会有堆栈溢出的威胁。这绝对不是错误的!但在我看来,它更具可读性。