javascript - $.fn setInterval 对具有不同计数值的多个元素

标签 javascript jquery animation setinterval infinite

我可以设法以不同的速度对多个元素执行无限动画,但我使用了多个 setInterval 函数。我的目标是使用一个函数来完成此操作,当我使用 $.fn 尝试此操作时,它们都以相同的速度进行动画处理。我哪里做错了?

Here is not accurate jsFiddlehere is targeted sample .

jQuery:

var eleHeight = $('.drop_leds').height();
var windowH = $(window).height();
var count = 0;
var counter;
var limit = windowH + eleHeight;

$.fn.goDown = function(x) {
    var _this = this;
    return counter = window.setInterval(function() {
        if( count >= 0 && count < limit ) {
            count += x;
            _this.css({'top':count +'px'});
        }
        else if( count >= limit ) { 
            count=0; _this.css({'top':'-'+ eleHeight +'px'});
        }

    },1);
};

$('#l_0,#l_6').goDown(1);
$('#l_1,#l_4').goDown(3);
$('#l_2,#l_7').goDown(4);
$('#l_3,#l_5').goDown(2);

html/css:

<div id="l_0" class="drop_leds"></div>
<div id="l_1" class="drop_leds"></div>
<div id="l_2" class="drop_leds"></div>
<div id="l_3" class="drop_leds"></div>
<div id="l_4" class="drop_leds"></div>
<div id="l_5" class="drop_leds"></div>
<div id="l_6" class="drop_leds"></div>
<div id="l_7" class="drop_leds"></div>

.drop_leds {position:absolute; width:10px; height:60px; background:black; top:0;}
#l_0 { left:40px; }#l_1 { left:70px; }#l_2 { left:110px; }#l_3 { left:140px; }
#l_4 { left:180px; }#l_5 { left:210px; }#l_6 { left:220px; }#l_7 { left:240px; }

Source.

最佳答案

每次调用 $.fn.goDown 时,您都会覆盖 count,因此所有计时器最终都会使用相同的 count 值。将其移至插件的内部范围内以解决问题:

$.fn.goDown = function(x) {
    var count = 0;
    var counter;
    var _this = this;
    return counter = window.setInterval(function() {
        if( count >= 0 && count < limit ) {
            count += x;
            _this.css({'top':count +'px'});
        }
        else if( count >= limit ) { 
            count=0; _this.css({'top':'-'+ eleHeight +'px'});
        }

    },1);
};

Fiddle

这样,每个间隔计数器都会有一个相应的count变量,只能在创建该间隔的执行上下文中访问。与您在插件范围内确定 _this 的范围完全相同。

关于javascript - $.fn setInterval 对具有不同计数值的多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031970/

相关文章:

javascript - 数组中的汉堡菜单

Javascript 插件/片段组合器

jquery - 需要用 jQuery 在每个圆圈中一个接一个地淡入淡出

jquery - 动画 div 不会隐藏在父项下

css - Snake loader css 动画关键帧不起作用

javascript - 如何删除最后一个标记谷歌地图v3

javascript - cordovaDialogs没有返回值

javascript - 新窗口中的外部样式表

javascript - jQuery:在已选元素中选择一个元素

javascript - 为什么在检索日期选择器值时我的函数会阻止检索其他值?