Javascript 如何在循环中刷新/重新加载CSS样式?

Javascript 如何在循环中刷新/重新加载CSS样式?,javascript,jquery,Javascript,Jquery,我有这个功能,它应该改变在循环中的左位置,使它看起来像是在移动。但它只是跳到了终点位置 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);

我有这个功能,它应该改变
在循环中的左位置,使它看起来像是在移动。但它只是跳到了终点位置

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);
}
我希望它看起来像jqueryanimate,但不使用jqueryanimate函数我想念什么?

编辑
工作示例:

如果我不得不猜测它可能正在做您希望它做的事情,但它的工作速度太快,无法实际显示动画,那么您应该尝试在每次迭代中延迟脚本以获得视觉动画。查看此功能

您误解了
setTimeout
的参数

setTimeout(anim(id, left), 100);
应该是

setTimeout(function() { anim(id, left); }, 100);
这是一个常见的错误。您想将函数传递给
setTimeout
。您所做的是调用函数,并传递其返回值(因为您没有
return
语句,所以返回值是
undefined

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


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

语法
anim函数(id,左){
完全错了。我猜你的意思是
函数anim(id,左){
相反..@techfoobar你是对的,我的错误。我编辑我的原始代码是为了让它更简单和更容易理解。在你的建议之后,我编辑了我的示例。setTimeout没有改变任何东西,只是我必须等待更长的时间才能看到div jumps。看起来harpo让你明白了这一点,很高兴你解决了。