2009-03-20 27 views
11

Tôi có một số hoạt ảnh mà tôi muốn thực hiện trên các đối tượng khác nhau trong dom.Hoạt hình Jquery xếp hàng

Tôi muốn chúng xảy ra theo thứ tự.

tôi không muốn làm điều đó như thế này:

$('#first').show(800, function() 
{ $('#second').show(800, function() {...etc...}); 

tôi muốn thêm vào tất cả các hình ảnh động của tôi (và cpu chức năng chuyên sâu) đối với một số loại đối tượng hàng đợi mà sẽ chắc chắn rằng họ thực hiện tuần tự.

Trả lời

9

Tôi không chắc chắn lý do tại sao bạn không muốn sử dụng phương pháp bạn mô tả. Nếu hoàn toàn từ quan điểm tổ chức, bạn không phải sử dụng các chức năng ẩn danh

function showFirst() { 
    $('#first').show(800, showSecond); 
} 

function showSecond() { 
    $('#second').show(800, showThird); 
} 

function showThird() { 
    $('#third').show(800); 
} 

function startAnimation() { 
    showFirst(); 
} 
+2

Tôi không thực sự cần hàng đợi này, nó sẽ chỉ làm cho tổ chức mã 1000x tốt hơn. Tôi không hiểu tại sao không có trình bao bọc cho bất kỳ hàm nào trong một $ như (func) .joinUniversalQueue(); Wow .... đó là chính xác những gì tôi muốn và nó sẽ được điên dễ dàng để viết như một phương pháp/plugin. Tôi sẽ làm điều đó. – thirsty93

+0

Suy nghĩ thứ hai, $ .joinUniversalQueue (func); sẽ dễ dàng hơn nhiều – thirsty93

2

Kiểm tra documentation để có hiệu ứng jQuery. Những thứ về queuing nên làm những gì bạn cần.

+0

Tôi tin rằng những người chỉ làm việc cho một yếu tố mặc dù – cobbal

+0

cobbal là chính xác từ những gì tôi đã đọc – thirsty93

2

Tôi vừa mới sử dụng plugin này, http://plugins.jquery.com/project/timers, một ngày khác để thực hiện điều tương tự. Về cơ bản của bạn lặp đi lặp lại thông qua tất cả các phần tử dom phù hợp và sau đó thực hiện một hình ảnh động mỗi khi chỉ số * số mili giây của bạn.

Mã này là một cái gì đó như thế này:

HTML:

<div id="wrapper"> 
    <div>These</div> 
    <div>Show</div> 
    <div>In</div> 
    <div>Order</div> 
</div> 

jQuery

$("#wrapper div").foreach(function(i) { 
    i = i + 1; 
    $(this).oneTime(800 * i, "show", function() { 
     $(this).show(); 
    }); 
}); 
+0

làm những giờ ngừng thực hiện cho đến khi các hình ảnh động kết thúc? – thirsty93

+0

Không, tôi đã sử dụng chúng để kết hợp các hình ảnh động với nhau để một người bắt đầu khi một người khác kết thúc. – jfar

-2

Điều này cũng sẽ làm việc.

  $('#first').show(800); 
      setTimeout("$('#second').show(800)", 800); 
      setTimeout("$('#third').show(800)", 1600); 
      setTimeout("$('#forth').show(800)", 2400); 

Tôi biết nó không hoàn toàn tuần tự, nhưng tôi thấy nó dễ đọc và cho phép bạn đặt hoạt ảnh linh hoạt hơn.

Lưu ý: Bạn phải trích dẫn mã bạn muốn thực hiện. Tôi đã không sử dụng bất kỳ dấu ngoặc kép trong mã trước đó, nhưng nếu bạn đã làm bạn sẽ có thể thoát khỏi chúng như sau.

  $('#first').animate({"width":"100px"}, 500); 
      setTimeout("$('#second').animate({\"width\":\"100px\"}, 500)", 800); 
      setTimeout("$('#third').animate({\"width\":\"100px\"}, 500)", 1600); 
      setTimeout("$('#forth').animate({\"width\":\"100px\"}, 500)", 2400); 

Bạn thường có thể tránh điều này bằng cách xen kẽ các trích dẫn bạn sử dụng, nhưng mặc dù nó đáng được đề cập đến.

UPDATE: Đây là một lựa chọn khác, và nó cũng đáng để thử qua jquery hứa hẹn here

  $('#first').show(800); 
      $('#second').delay(800).show(800); 
      $('#third').delay(1600).show(800); 
      $('#forth').delay(2400).show(800); 
+0

Thỉnh thoảng có phí, và cái hoàn thành trước cái kia (không thể đoán trước được). Đặt hàng có thể quan trọng đối với một số hoạt ảnh. Xếp hàng đảm bảo hoạt ảnh thứ hai bắt đầu khi hoạt ảnh đầu tiên kết thúc. –

+0

@Ryan Taylor Không chắc chắn về cách thức thời gian có thể xuống xe. Đúng là trình duyệt sẽ không đảm bảo chính xác mili giây do tải CPU, nhưng đó là sự hiểu biết của tôi rằng lệnh thực hiện được đảm bảo. Tôi đã cập nhật câu trả lời này để bao gồm một tùy chọn khác. Và hãy nhớ rằng cách chính xác để làm điều này, là cách mà anh ấy không muốn làm điều đó :), chỉ cần đưa ra lựa chọn thay thế. – Ben

+0

setTimeout là veeeeeeeeeeeeery không đáng tin cậy để sử dụng cho hoạt ảnh. đó là một chức năng không đồng bộ có thể làm cho giờ gỡ lỗi cho người mới bắt đầu – user151496

Các vấn đề liên quan