在jQuery中循环嵌套的animate函数

时间:2016-04-21 04:57:38

标签: javascript jquery

所以我想转换这段代码:

$('.spawn_worm').animate({
    left: '+=20px',
    top: '-=20px'
},100, "linear", function(){
    $('.spawn_worm').animate({
        left: '+=20px',
        top: '-=16px'
    },100, "linear", function(){
        $('.spawn_worm').animate({
            left: '+=20px',
            top: '-=12px'
        },100, "linear", function(){
            $('.spawn_worm').animate({
                left: '+=20px',
                top: '-=8px'
            },100, "linear", function(){
                $('.spawn_worm').animate({
                    left: '+=20px',
                    top: '-=4px'
                },100, "linear", function(){
                    $('.spawn_worm').animate({
                        left: '+=20px',
                        top: '+=0px'
                    },100, "linear", function(){
                        $('.spawn_worm').animate({
                            left: '+=20px',
                            top: '+=4px'
                        },100, "linear", function(){
                            $('.spawn_worm').animate({
                                left: '+=20px',
                                top: '+=8px'
                            },100, "linear", function(){
                                $('.spawn_worm').animate({
                                    left: '+=20px',
                                    top: '+=8px'
                                },100, "linear", function(){
                                    $('.spawn_worm').animate({
                                        left: '+=20px',
                                        top: '+=12px'
                                    },100, "linear", function(){
                                        $('.spawn_worm').animate({
                                            left: '+=20px',
                                            top: '+=16px'
                                        },100, "linear", function(){

                                        });
                                    });
                                });
                            });
                        });
                    });
                });
            });
        });
    });
});
对不那么愚蠢的事情。因为它需要花费我一年的时间来完成它,因为它是很多代码,我认为它可以通过循环来解决。

我希望animate函数属性left始终相同+=20px。并且属性top-20px开始并增加到180px,然后再次减少到180px并在(window.width)/20循环后完成。

这甚至可以吗? 谢谢你,抱歉这个noob问题(:

2 个答案:

答案 0 :(得分:1)

你可以使用这样的东西。根据需要更改if条件。

var count = parseInt(window.innerWidth/20);
function animateElement(){
    if(count){
        $('.spawn_worm').animate({
            left: '+=20px',
            top: '-=20px'
        }, 100, animateElement);
        count--;
    }
}
animateElement();

答案 1 :(得分:0)

您可以使用像

这样的循环



jQuery(function($) {
  $('button').click(function() {
    var top = 20,
      sign = -1;

    anim();

    function anim() {
      $('.spawn_worm').animate({
        left: '+=20px',
        top: (sign == 1 ? '+' : '-') + '=' + top + 'px'
      }, 100, "linear", function() {
        if (sign * top < 16) {
          top += 2 * sign;
          if (!top) {
            sign = 1;
          }
          anim();
        }
      });
    }
  });
});
&#13;
body {
  height: 1000px;
  margin-top: 200px;
}
.ct {
  position: relative;
  height: 500px;
}
.spawn_worm {
  height: 50px;
  position: absolute;
  background-color: red;
  display: inline-block;
  width: 50px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Test</button>
<div class="ct">
  <div class="spawn_worm"></div>
</div>
&#13;
&#13;
&#13;