3

値が不明な変数があります。整数になります。このために、言いましょうvar a = 3;

継続的に呼び出される関数があります。

var a = 3;
function anim() {
        left = parseInt(galleryInner.css('left'), 10);   
        if(Math.abs(left) >= (galleryItem.length * galleryItem.width())){
            galleryInner.css('left', 0);
        }
        galleryInner.animate({left: '-=20' }, 200, anim);

        that.appendEnd();
}

this.appendEnd()を3回だけ実行したいのですが、a === 3

これどうやってするの?

4

5 に答える 5

7

anim() が呼び出されるたびに増加するカウンター変数をインスタンス化します。いつ

counter % a === 0

次に、 this.appendEnd() を実行します

于 2012-06-25T22:41:05.657 に答える
2

現在のカウントを保持する 2 番目の変数を作成し、3 回目の反復ごとに必要な呼び出しをラップします。

if(counter % a == 0) {
    //code you want called
}
于 2012-06-25T22:41:37.160 に答える
1

カウンターをカプセル化するが、「a」にグローバル変数を使用するアプローチは次のとおりです。

var a = 3;

function anim(){
    // Run the usual code here
    // ...

    if (++anim.counter % a === 0) {
        // Run the special code here
        // ...
    }
}
// Initialize static properties.
anim.counter = 0;

また、「a」変数も「頻度」と呼んでカプセル化するアプローチを次に示します。

function anim(){
    // Run the usual code here
    // ...

    if (++anim.counter % anim.frequency === 0) {
        // Run the special code here
        // ...
    }
}
// Initialize static properties.
anim.counter = 0;
anim.frequency = 1;

次に、anim()を初めて呼び出す前に、目的の頻度値を設定します。

anim.frequency = 3;
于 2012-06-25T22:52:33.977 に答える
1

まず、関数が呼び出された回数をカウントするインクリメント変数が必要です。たとえば、関数を次のように開始します。

var me = arguments.callee;
me.timesCalled = (me.timesCalled || 0)+1;

これで、そのカウンターを確認できます。「X 回ごと」に何かが発生することを確認するには、X によるモジュラスが 0 であるかどうかを確認します。

if( me.timesCalled % a == 0) { /* do something */ }

そして、あなたはそれを持っています!

于 2012-06-25T22:41:26.527 に答える
0

カウンターが 0 より大きいことを確認する必要があります。そうしないと、関数 appendEndが初めて起動されます。

if (counter > 0 && counter % a == 0) { ... }

以下に、完全なコードを示します。

var appendEndExecutedTimes = 0;

function anim(){
        left = parseInt(galleryInner.css('left'), 10);   
        if(Math.abs(left) >= (galleryItem.length * galleryItem.width())){
            galleryInner.css('left', 0);
        }
        galleryInner.animate({left: '-=20' }, 200, anim);


        if (appendEndExecutedTimes > 0 && appendEndExecutedTimes % a === 0) {
           that.appendEnd();
        }
        appendEndExecutedTimes += 1;

    }
于 2012-06-25T22:44:07.830 に答える