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を渡すことです (ステートメントがないため、これは ですundefined)。

これが、アニメーションが「ジャンプ」した理由です。次のステップをすぐに呼び出していて、実際にはタイムアウトを使用していないためです。

引数を渡す必要がない場合は、ラッパーなしで関数名を使用できることに注意してください。function () {}引数を渡したい場合は、上記のようにクロージャーを作成する必要があります。

于 2013-05-26T18:18:11.513 に答える