0

私は次のようにJqueryAirportを使用しています。

$('#basketTotal').airport([s]);
$('#basketTotal').html(s);

空港機能は次のとおりです。

(function($){ 
    $.fn.extend({  
        airport: function(array) {
        var self = $(this);
        var chars = ['1','2','3','4','5','6','7','8','9','0','.','£'];
        var longest = 0;
        var items = items2 = array.length;
        function pad(a,b) { return a + new Array(b - a.length + 1).join(' '); }
        $(this).empty();
        while(items--)
            if(array[items].length > longest) longest = array[items].length;
        while(items2--)
            array[items2] = pad(array[items2],longest);
        spans = longest;
        while(spans--) {
            $(this).prepend("<span class='c" + spans + "'></span>");
        }

            function testChar(a,b,c,d){
            $(self).find('.c'+a).html((chars[b]==" ")?"&nbsp;":chars[b]);
            setTimeout(function() {
                if(b > chars.length)
                    testChar(a+1,0,c,d+1);
                else if(chars[b] != array[c].substring(d,d+1).toLowerCase())
                    testChar(a,b+1,c,d);
                else
                    testChar(a+1,0,c,d+1);
            }, 15);


        }
        testChar(0,0,0,0);
    } 

    }); 
})(jQuery);

空港関数に渡す文字列は1つだけです(文字列の配列ではありません)。空港は無期限に運行していて止まりませんが、空港が終わったら停車して演奏する必要があります$('#basketTotal').html(s);

アニメーションの1回の反復が終了したときに、関数を停止するにはどうすればよいですか?

4

1 に答える 1

1

の開始時にtestChar()、実行する反復回数が完了したかどうかを確認するためのテストを追加できます。完了した場合は、戻るだけです。

testChar()を実行せずにから戻るsetTimeout()と、アニメーションは停止します。

いつ停止するかがよくわからないため、どのテスト条件を推奨するか正確にはわかりませんが、次のようになります。

       function testChar(a,b,c,d){

           // if (done now) return;

           $(self).find('.c'+a).html((chars[b]==" ")?"&nbsp;":chars[b]);
           setTimeout(function() {
               if(b > chars.length)
                   testChar(a+1,0,c,d+1);
               else if(chars[b] != array[c].substring(d,d+1).toLowerCase())
                   testChar(a,b+1,c,d);
               else
                   testChar(a+1,0,c,d+1);
           }, 15);
        }

特定の反復回数の単純なカウンターである場合は、testChar(), increment it inside oftestChar() `の前にそのカウンターを初期化し、目的の反復回数が完了したかどうかを確認できます。その場合は、タイマーを設定せずに戻ってください。

OK、コードを少し調べた後(つまり、どのように機能するかについての説明がない1つのあいまいなアルゴリズム)、次のようにアニメーションを終了できるように見えます。

    function testChar(a,b,c,d){
        // if we're beyond the number of spans we have, we must be done
        if (a > longest) return;

        $(self).find('.c'+a).html((chars[b]==" ")?"&nbsp;":chars[b]);
        setTimeout(function() {
            if(b > chars.length)
                testChar(a+1,0,c,d+1);
            else if(chars[b] != array[c].substring(d,d+1).toLowerCase())
                testChar(a,b+1,c,d);
            else
                testChar(a+1,0,c,d+1);
        }, 15);
    }
于 2012-04-17T16:33:26.787 に答える