一个容器中几件物品延迟效应的自动化

时间:2013-02-11 15:24:49

标签: javascript jquery jquery-selectors settimeout

我有一个像这样的HTML代码:

<div id="buttons">
    <a id="b1" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
    <a id="b2" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
    <a id="b3" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
    <a id="b5" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
    <a id="b6" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
    <a id="b7" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
    <a id="b8" href="#"><img src="http://content.captive-portal.com/campaigns/redbull/_images/b6.jpg" /></a>
</div>

和jquery就像这样:

    $('#b1, #b2, #b3, #b4, #b5, #b6, #b7, #b8, #b9').hide();

    setTimeout(function() {
        $('#b1').fadeIn(500)
    }, 600);

    setTimeout(function() {
        $('#b2').fadeIn(500)
    }, 700);

    setTimeout(function() {
        $('#b3').fadeIn(500)
    }, 800);

    setTimeout(function() {
        $('#b4').fadeIn(500)
    }, 900);

    setTimeout(function() {
        $('#b5').fadeIn(500)
    }, 1000);

    setTimeout(function() {
        $('#b6').fadeIn(500)
    }, 1100);

    setTimeout(function() {
        $('#b7').fadeIn(500)
    }, 1200);

    setTimeout(function() {
        $('#b8').fadeIn(500)
    }, 1300);

如何自动延迟“按钮”div中的所有项目,因此每一个下一个项目都会延迟出现,但是一个接一个地出现?因此,不是为每个单独的项目编写一个setTimeout函数,而是执行一次,所以如果我再添加100个项目,它仍然可以正常工作吗? 示例如下:jsFiddle

1 个答案:

答案 0 :(得分:2)

你可以这样做:

$('[id^=b]').hide();
for (var i=1; i<9; i++) {
  (function(i){
    setTimeout(function() {
       $('#b'+i).fadeIn(500);
     }, 500+100*i);
  })(i);
}

Demonstration

请注意, 没有为每个a元素提供ID,并且您不必在js中设置限制:您可以使用简单的类( <a class=au...)并执行此操作:

$('.au').hide().each(function(i){
  (function(e, i){
    setTimeout(function() {
       e.fadeIn(500);
    }, 500+100*i); 
  })($(this), i);
});

Demonstration