1

这是一个小提琴--- http://jsfiddle.net/mFrbA/2/

这只是对下面代码的测试。我试图让它一直向下滚动,缓慢而稳定。我不只是通过直接滚动到文档底部以直接方式执行它的原因是因为我想以增量方式执行它,同时让用户有机会取消它(因此变量scrolling,可以切换通过外部函数。

变量的原因wait是(理论上)防止 while 循环比动画循环得更快——我不确定它是否会等待动画完成后再重新开始。但是完整的函数永远不会被调用,动画从一开始就不会发生。

但是,这些都没有执行。我不确定我做错了什么。

$(function() {
    scrolling = true;
    while (scrolling) {
        var wait = true; 
        $('html, body').animate(
            { scrollTop: '+=50' }, 
            { duration: 800,
             easing: 'linear',
             complete: function(){
                 alert("hi again");
                 wait = false;}
            }
        );
        while(wait) {
            console.log("waiting");
        }
    }
});
4

1 回答 1

2

浏览器中的 JavaScript 是带有事件循环的单线程(实际上)。你while(wait)绑定了 JavaScript 的执行,所以动画(这是异步的)永远没有机会发生。

setInterval这就是我们有回调的原因,除了一个可怕的事情之外,几乎没有解决这个问题的方法。

于 2013-09-29T22:35:44.150 回答