Giả sử tôi có một số hoạt ảnh cùng một lúc và tôi muốn gọi hàm sau khi tất cả được hoàn tất.jQuery, gọi lại chỉ một lần sau nhiều hoạt ảnh
Chỉ với một hoạt ảnh, thật dễ dàng; có một cuộc gọi lại cho điều đó. Ví dụ:
$(".myclass").fadeOut(slow,mycallback);
Sự cố là, nếu bộ chọn của tôi tìm thấy một số mục, gọi lại sẽ được gọi cho từng mục.
Cách giải quyết không quá khó; ví dụ:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var $mc=$(".myclass"),l=$mc.length;
$mc.fadeOut("slow",function(){
if (! --l) $("#target").append("<p>All done.</p>");
});
});
</script>
<style type="text/css">
</style>
</head>
<body>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<div id="target"></div>
</body>
</html>
Câu hỏi của tôi là: có cách nào tốt hơn để làm điều này không?
Trong hầu hết các trường hợp, tôi sử dụng boolean thay vì bộ đếm (do đó hành động được thực hiện ở cuối hoạt ảnh đầu tiên), nhưng nếu không thì đó là phương pháp tương tự. Câu hỏi hay, tôi tò mò về những cách khác. –
Thật vậy. Bạn muốn chờ tất cả chúng nếu ví dụ tất cả các hoạt ảnh của bạn không cùng độ dài (không giống như trong ví dụ đơn giản của tôi), và bạn chỉ muốn làm điều gì đó sau khi mọi thứ ngừng di chuyển hoặc mờ dần trên trình duyệt của bạn. –