1

関数に多くの問題があり、変数のスコープと混同しています。コールバック関数で試してみましたが、取得できません。

cssで背景をアニメーション化する機能があります。setInterval の実行中にもう一度クリックしたときに、関数がインクリメンタ変数を 0 に再起動しないようにする必要があります。html の time1 または time2 で a を 2 回クリックすると、counter の順序が保持されないことがわかります。

function movie(elm,jumpPx,spriteHeight,duration){
var inc=0;
var time=setInterval(function(){

    if(inc<spriteHeight){
        inc+=jumpPx;
        //elm.style.backgroundPosition='0px -'+inc+'px';
        elm.innerHTML=inc;
    }else{
        clearInterval(time);
        elm.style.backgroundPosition='0px -0px';          
    }
},duration);  

}

<p onclick="movie(this,1,1000,1000)">time1</p>
<p onclick="movie(this,1,1000,1000)">time2</p>
4

1 に答える 1

1

あなたの変数宣言は関数内にあります:

function movie(elm,jumpPx,spriteHeight,duration){
    var inc=0;
    ... other code ...
}

したがって、関数が呼び出されるたびに、'inc' が 0 にリセットされます。

var inc = 0;
function movie(elm,jumpPx,spriteHeight,duration){
    ... other code ...
}

関数の外に移動すると、リセットされません

于 2013-11-05T09:23:23.940 に答える