简单的jQuery机场文字效果,需要停止,清除更改在飞行

Simple jQuery airport text effect, need to stop, clear change on fly?

本文关键字:清除 飞行 jQuery 机场 文字 简单      更新时间:2023-09-26

我喜欢在这里使用这段简单的代码

http://www.unwrongest.com/projects/airport/

,它将在我的网站上用于天气显示http://www.xaluan.com

的想法是:温度将从00跳转到当前的温度,它看起来很好和活…问题是,当我将温度从C更改为F,或更改温度的位置时,温度将需要更改,然后文本效果也需要更改。

但我试过很多次,甚至使用。stop或。clearque重新启动效果,但没有成功。它搞砸了,有的情况下不运行,有的情况下数组的效果变成了两个数组的合并…我完全迷路了,谢谢你的建议

this is narrow simple code for statup test:
<span id="tempnow" class="tempnow">30</span>
<span onclick="changeC()">°F</span>
<span onclick="changeF()">°C</span>
<script>
// fist time run will be:
    $(function($){
$('#tempnow').airport(['00','34']);
});
function changeF () {
$('#tempnow').airport([ '00', '91' ]);
 }
function changeC () {
$('#tempnow').airport([ '00', '34' ]);
 }
(function($){ 
     $.fn.extend({  
         airport: function(array) {
            var self = $(this);
            var chars = ['0','9','8','7','6','5','4','3','2','1','-'];
            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){
                if(c >= array.length)
                    setTimeout(function() { testChar(0,0,0,0); }, 1000);                
                else if(d >= longest)
                    setTimeout(function() { testChar(0,0,c+1,0); }, 1000);
                else {
                    $(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);
                    }, 20);
                }
            }
            testChar(0,0,0,0);
        } 
    }); 
})(jQuery);

</script>

我把jsbin放在这里,希望有人能通过代码帮助我

http://jsbin.com/onaqis/7/edit#source

谢谢. .

这里有一个简单的解决方法:http://jsfiddle.net/EUKuS/你需要去掉下面一行来打破这个无休止的循环:

if(c >= array.length)
  setTimeout(function() { testChar(0,0,0,0); }, 1000);     // <----- COMMENT OUT!
else if(d >= longest)

应该工作,但修复插件会更好。