javascript - 为什么这会移动元素 4 次?

标签 javascript jquery dom browser animation

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

有人能解释一下吗?它有点有效,但一切都移动了太多次。

<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>

最佳答案

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"))) });

关于javascript - 为什么这会移动元素 4 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667113/

相关文章:

javascript - 查找具有与模式匹配的属性的元素

带有 boolean 值的 JavaScript if 语句

javascript - 如何在给定用户输入 X、Y 点的情况下绘制 HTML5 Canvas 线?

javascript - Mousemove 回调事件不显示按下哪个鼠标按钮 safari

jquery 可拖动隐藏内容

javascript - 创建动态元素和 document.write

javascript - 正确的 JSON 格式 : newline not allowed for each item in a JSON array?

javascript - 如何将存储在字符串中的数值相加?

javascript - 在没有标准键的情况下过滤 Javascript 对象数组的最有效方法

javascript - 一个输入文件生成多个输出文件