【问题标题】:Why does this move the elements 4 times?为什么这会将元素移动 4 次?
【发布时间】:2009-03-20 17:19:32
【问题描述】:

为什么这不起作用?我想要达到的效果是积木从左向右移动,并开始“推动”下一个积木。嵌套回调在外部元素上执行动画似乎是一个问题。

谁能解释一下?它有点工作,但一切都移动了太多次。

<html>
<head>
<style>
.item { width: 49px; height: 49px; border: 1px solid orange; background-color: #ccccff; }
#i0 { position: absolute; left: 0px; }
#i1 { position: absolute; left: 150px; }
#i2 { position: absolute; left: 200px; }
#i3 { position: absolute; left: 250px; }
#i4 { position: absolute; left: 400px; }
#i5 { position: absolute; left: 450px; }
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
jQuery(function() {
  $("#i0").animate({left:"+=100"}, function() { 
    $("#i0,#i1,#i2,#i3").animate({left:"+=100"}, function() { 
      $("#i0,#i1,#i2,#i3,#i4,#i5").animate({left:"+=50"});
    });
  });
});
</script>
</head>
<body>  
  <div id="i0" class="item"></div>
  <div id="i1" class="item"></div>
  <div id="i2" class="item"></div>
  <div id="i3" class="item"></div>
  <div id="i4" class="item"></div>
  <div id="i5" class="item"></div>
</body>
</html>

【问题讨论】:

    标签: javascript jquery dom browser animation


    【解决方案1】:

    animate() 的第二个参数是动画完成时调用的回调。由于 $("#i0,#i1,#i2,#i3").animate(..) 动画 4 件事,它调用它的回调 4 次。像这样的方法可能会奏效:

    function move(i, left, callback) {
      $("#i"+i).animate({left:left}, callback);
    }
    
    function sequence(n, left, callback) {
      return function() {
        var i = 0;
        for (; i < n; i++) {
          move(i, left);
        }
        move(i, left, callback);
      }
    }
    
    jQuery(function() { move(0, "+=100", sequence(3, "+=100", sequence(5, "+=100"))) });
    

    【讨论】:

    • 您能提供一个解决方案吗?在所有元素完成动画后,我想要一个回调。我怎么能这样做?
    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多