HTML代码:
<ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> <li>e</li> </ul>
js代码:
<script type="text/javascript"> $(document).ready(function() { var lis = $("li"); for (var i = 0; i < lis.length; i++) { $(lis[i]).animate({opacity: 0},1000); } }); </script>
我只是发现lis会一起消失.我怎么能一个接一个地消失?
解决方法
对不起参加晚会
当定时器阻塞并依赖于定时器的精度时,现有的答案有问题,而且它们需要实际的延迟.
jQuery实际上提供了一个通用的方式来顺序执行promise:
$(document).ready(function() { var lis = $("li"); var queue = $.Deferred().resolve(); // create an empty queue lis.get().forEach(function(li){ queue = queue.then(function(){ return $(li).animate({opacity: 0},1000).promise(); }) }); });
请注意,即使您为其分配了不同的动画持续时间或不同的动画,即使在最后一个动画完成时,队列中的结果也将包含一个钩子.这也支持聚合(等待所有承诺并行完成)等等.