2010-05-10 30 views
10

có gì sai trong mã này? Tôi đang cố gắng để có được hiệu ứng này: fadeOut(500)attr('class','myClass') bị trễ 600 millisecs .. sau đó delay(600) lại và fadeIn(500). Sự chậm trễ xảy ra chính xác nhưng attr() không bị trì hoãn, nó sẽ cháy khi #myDiv vẫn đang mờ dần! :. '(delay() và fadeOut() không trì hoãn attr() trong hàng đợi

$('#myDiv').fadeOut(500) 
      .delay(600) 
      .attr('class','myClass') 
      .delay(600) 
      .fadeIn(500); 

Trả lời

25

Các .delay() chỉ ảnh hưởng đến hình ảnh động hoặc fx hàng đợi (trừ khi bạn chỉ định một hàng đợi khác nhau cụ thể) Hãy ghi nhớ rằng chaining và xếp hàng là 2 khái niệm khác biệt rõ rệt, chaining tiếp tục việc sử dụng jquery cùng thiết lập, nhưng đó là một điều hoàn toàn khác so với bất kỳ hàng đợi sự kiện trên các yếu tố trong tập hợp đó

để có cuộc gọi .attr() bị ảnh hưởng, bạn cần phải thêm nó như là một callback để cùng hàng đợi sử dụng .queue(), như thế này:.

$('#myDiv').fadeOut(500) 
      .delay(600) 
      .queue(function(next) { $(this).attr('class','myClass'); next(); }) 
      .delay(600) 
      .fadeIn(500); 

Cũng lưu ý có .addClass(), .removeClass().toggleClass() phương pháp có sẵn có thể làm điều này một chút bụi :)

+1

Tôi nghĩ bạn nên gọi '$ (this) .dequeue()' bên trong hàm. Từ các tài liệu: * Lưu ý rằng khi thêm một hàm với .queue(), chúng ta nên đảm bảo rằng .dequeue() cuối cùng được gọi để hàm tiếp theo trong dòng thực hiện. * Anyway +1;) –

+0

@Felix - Woops I ' m thường gọi đây là mục cuối cùng trong hàng đợi, bắt tốt :) –

+0

Xin chào Nick, cảm ơn rất nhiều câu trả lời của bạn. Nó hoạt động như bạn nói, tuy nhiên các cuộc gọi sau trong hàng đợi không hoạt động nữa .. :( EDIT chỉ thấy bây giờ Felix bình luận .. cảm ơn rất nhiều cho cả hai bạn – Luca

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