1

我有这个功能应该改变<div>循环中的左侧位置,使它看起来像在移动。但相反,它只是跳到结束位置。

function anim (id, left) {
    $('#k' + id).css('left', parseInt($('#k' + id).css('left')) + 1);
    if(parseInt($('#k' + id).css('left')) == left){
        return;
    }
   setTimeout(anim(id, left), 100);
}

我希望它看起来像 jQuery animate 但不使用 jQuery animate 函数。我想念什么?

编辑工作示例:http: //jsfiddle.net/h7MuB/21/

4

2 回答 2

3

你误解了 的论点setTimeout

setTimeout(anim(id, left), 100);

应该

setTimeout(function() { anim(id, left); }, 100);

这是一个常见的错误。您想将函数传递给setTimeout. 你正在做的是调用函数,并传递它的返回值(因为你没有return声明,所以 is undefined)。

这就是动画“跳跃”的原因:因为您立即调用下一步,而不是真正使用超时。

请注意,如果您不需要传递参数,则可以使用不带包装器的函数名称。function () {}如果你想传递参数,你需要像上面那样创建一个闭包。

于 2013-05-26T18:18:11.513 回答
0

如果我不得不猜测它可能正在做您希望它做的事情,但是它工作得太快以至于它实际上无法显示动画,您应该尝试在每次迭代中延迟您的脚本以获得视觉动画。看看这个函数... SetTimeOut()

于 2013-05-26T17:14:13.580 回答