逐步添加DIV ... 1,2,3,4,8,16

时间:2014-02-07 01:20:31

标签: javascript jquery

我正在尝试逐步创建div框,并在按下按钮时将它们动画几次。我有一个正在运行的代码,一切都很顺利。它直接进入endhost,然后再次离开它原来的位置。这主要是我的工作,也可以在这里找到演示:http://jsfiddle.net/LSegC/1/

现在我想要做的是逐个增加整个动画DIV的数量(现在),最多3个Div,但随后DIV总数呈指数增长。因此,动画DIV的总数将分别为1,2,3,然后是4,8,16等。

请记住,我的问题不是在DIV中显示数字,实际上正在创建多少 DIVS!所以我想要8个DIV,编号为1到8个动画。希望现在很清楚。

$(document).ready(function(){

$("button").click(function() {

  var d = $(".t").fadeIn();
  var speed = +$("#number1").val();

  d.animate({left:'+=230px'}, speed);
  d.animate({left:'+=230px'}, speed);
  d.animate({top:'+=20px', backgroundColor: "#f09090", text:'12'}, speed/4, "swing", function() {
      $('.span', this).fadeOut(100, function() {
          $(this).text(function() {
              return 'a' + $(this).text().replace('a', '');
          }).fadeIn(100);
      });
  });
  d.delay(1000).animate({left:'-=230px'}, speed);
  d.animate({left:'-=230px'}, speed);
  d.fadeOut().promise().done(function() {
      d.last().after(function() {

          var top = +$(this).css('top').replace('px', ''),
              number = +$(this).data('number') + 1,
              $clone = $(this).clone();

          $clone.data('number', number).css('top', top + 20);
          $clone.find('.span').text(number);

          return $clone;
      });

      d.find('.span').text(function() {
          return $(this).text().replace('a', '');
      });
  })

});

2 个答案:

答案 0 :(得分:1)

修改

你的代码太难以操作了,我重新创建了整个事情: HTML:

<img id="streamline1" src="https://cdn3.iconfinder.com/data/icons/streamline-icon-set-free-pack/48/Streamline-04-48.png" />
<img id="LAN" src="https://cdn1.iconfinder.com/data/icons/ecqlipse2/NETWORK%20-%20LAN.png" />
<img src="https://cdn3.iconfinder.com/data/icons/streamline-icon-set-free-pack/48/Streamline-04-48.png" id="streamline" />
<div id="mid"></div>
<div id="bottom"></div>
<div>Speed (mS):
    <input value="500" id="speed" type="number" style="position: relative"></input>
    <button>Apply!</button>
    <!-- dynamic area -->
    <div class="packets"></div>
</div>

JS:

$(document).ready(function () {

    var count = 0;
    var items = 0;
    var packetNumber = 0;
    var speed = 0;
    $("button").click(function () {

        if (count < 4) {
            items = items + 1;
            count++;
        } else {
            items = items * 2;
        }

        speed = $("#speed").val();
        createDivs(items);
        animateDivs();
    });

    function createDivs(divs) {
        packetNumber = 1;
        var left = 60;
        for (var i = 0; i < divs; i++) {
            var div = $("<div class='t'></div>");
            div.appendTo(".packets");
            $("<font class='span'>" + packetNumber + "</font>").appendTo(div);
            packetNumber++;
            div.css("left",left+"px");

            div.hide();
            left += 20;
        }
    }

    function animateDivs() {
        $(".t").each(function () {
            var packet = $(this);

            packet.show();

            packet.animate({
                left: '+=230px'
            }, speed);

            packet.animate({
                left: '+=230px'
            }, speed);

            packet.animate({
                top: '+=20px',
                backgroundColor: "#f09090",
                text: '12'
            }, speed / 4, "swing", function () {

                $('.span').fadeOut(100, function () {

                    $(this).text(function () {
                        return 'a' + $(this).text().replace('a', '');
                    }).fadeIn(100);

                });

            });
            packet.delay(1000).animate({left:'-=230px'}, speed);
            packet.animate({left:'-=230px'}, speed);
        }).promise().done(function(){
        $(".packets").empty();});

    }
});

CSS:

#bottom {
    border: 1px dashed gray;
    position: absolute;
    left: 55px;
    height: 20px;
    width: 500px;
    opacity: 0.5;
    top: 30px;
    z-index=-1;
}
#mid {
    border: 1px dashed gray;
    position: absolute;
    left: 55px;
    height: 20px;
    width: 500px;
    opacity: 0.5;
    top: 10px;
    z-index=-1;
}
.t {
    display: inline-block;
    position: absolute;
    top: 10px;
    left: 60px;
    text-align: center;
    vertical-align: middle;
    width: 20px;
    height: 20px;
    background-color: lightgreen
}
#streamline {
    width: 50px;
    height: 50px;
    right: 0px;
    position: fixed;
    left: 548px;
}
#streamline1 {
    left: 0px;
    width: 50px;
    height: 50px;
}
#LAN {
    width: 50px;
    height: 50px;
    left: 275px;
    position: fixed;
}
.packets {
    display: inline;
}

FIDDLE:http://jsfiddle.net/54hqm/3/

答案 1 :(得分:0)

我也很难遵守这些代码,但是我把它剪掉了很多,想出了一种“单向”“经验”的方法。 FIDDLE

速度可以通过增量(inc)的变化来调整,但可以使用多种方法。

你能用“指数”更具体地表达你的意思吗?你的意思是整个div的指数速度增加,或者说速度增加,直到你达到50%,然后是速度下降。

JS

$("button").click(function() {
  var speed = 1000;
  var d = $('.mover');
  d.show();
  var inc = 1;
  for (var i=0; i<290; i=i+inc)
  {
   d.animate({   left: i,
               easing: 'linear'}, 1);
   if (inc < 11)
     {
      inc = inc + 1;
      } else {
      inc = inc - 1;
               }
   }
});