jQuery .animate()回调无限循环

时间:2011-06-23 23:45:54

标签: jquery html jquery-animate infinite-loop

一个简单的问题:我为什么要这样做

var start = function() {
    $('#element').animate({}, 5000, 'linear', start);
}

但不是这个

    function start() {
        $('#element').animate({}, 5000, 'linear', start());
    }

第一个完美无缺,完成后重新启动动画。第二个简单地导致无限循环。

5 个答案:

答案 0 :(得分:8)

使用

function start() {
    $('#element').animate({}, 5000, 'linear', start);
}

function start() {
    $('#element').animate({}, 5000, 'linear', function(){ start(); });
}

第二种情况非常有用,如果你想实际传递一些参数来启动..

答案 1 :(得分:4)

这是因为在第一个发送函数的命名空间时,当你将()添加到函数名的末尾时它会立即执行函数

答案 2 :(得分:4)

在你的第二个函数中,你正在执行函数而不是传递对函数的引用,因此它将进入无限循环。

更改您的第二个功能:

function start() {
 $('#element').animate({}, 5000, 'linear', start());
}

function start() {
  $('#element').animate({}, 5000, 'linear', start); //Notice the change to start
}

答案 3 :(得分:3)

在第二个示例中,您基本上是对start()进行递归调用。

您要做的是传递函数start本身,就像您在第一个示例中所做的那样。您的第二个示例仅提供调用start()的结果。

答案 4 :(得分:2)

在第二种情况下,您直接调用该函数,而不是将其作为参数传递。

start()会立即调用start,并将其返回值传递给.animate()。这会导致无限的自递归。