0

我以下列方式使用 Jquery Airport:

$('#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);

我只会将一个字符串传递给机场函数(而不是字符串数组)。机场无限期地运行并且不会停止,但我需要让它停止并$('#basketTotal').html(s);在它完成时执行。

如何在完成动画的一次迭代时使函数停止?

4

1 回答 1

1

在开始时testChar(),您可以添加一个测试以查看您是否完成了您想要执行的迭代次数,如果是,则返回。

如果您从testChar()没有执行 a 的情况下返回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()` 之前初始化该计数器并检查是否已完成所需的迭代次数。如果是这样,只需返回而不设置计时器。

好的,在稍微研究了你的代码之后(这是一种晦涩的算法,没有任何关于它应该如何工作的描述),看起来你可以像这样终止动画:

    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 回答