2011-02-10 35 views
13

Tôi đang làm gì ở đây?bị trì hoãn thêm lớp/xóa lớp chức năng không hoạt động

$(function() { 
$('ul li:nth-child(1)').addClass("go").delay(4500).removeClass("go"); 
$('ul li:nth-child(2)').addClass("go").delay(1500).removeClass("go"); 
$('ul li:nth-child(3)').addClass("go").delay(500).removeClass("go"); 
$('ul li:nth-child(4)').addClass("go").delay(4500).removeClass("go"); 
$('ul li:nth-child(5)').addClass("go").delay(1000).removeClass("go"); 
}); 
+0

Giải thích nhỏ sẽ hữu ích. Tôi đoán bạn đang cố gắng thay đổi lớp danh sách theo một thứ tự cụ thể bằng cách đặt nó sau một sự chậm trễ khác nhau cho mỗi mục. Bit nào không hoạt động? – Spacedman

+0

.delay() chỉ làm chậm hoạt ảnh, không hoạt động –

Trả lời

16

.delay() chỉ được thiết kế để hoạt động với hoạt ảnh. Bạn sẽ phải nghỉ mát để sử dụng setTimeouts thường xuyên cho những gì bạn đang thực hiện:

var li = $('ul li:nth-child(1)').addClass('go'); 
setTimeout(function() { 
    li.removeClass('go'); 
}, 4500); 

Để làm điều này để mỗi <li> một chút dễ chịu hơn, bạn có thể cấu trúc mã của bạn như sau:

$(function() { 
    var delays = [4500, 1500, 500, 4500, 1000]; 
    $('ul li').addClass('go').each(function (i) { 
     setTimeout(function (li) { 
      li.removeClass('go'); 
     }, delays[i], $(this)); 
    }); 
}); 
+0

Tôi đang tạo hoạt ảnh mà ở đó tôi sẽ có một loạt các mục danh sách ': không có; Sau đó, tôi cần phải thêm một lớp vào từng mục danh sách, mỗi lần một khoảng thời gian được xác định trước, chỉ sau khi thời gian trôi qua là lớp đã bị xóa và được thêm vào mục danh sách tiếp theo. Tại thời điểm đó, cùng một lớp sẽ được thêm vào mục danh sách tiếp theo cho một số tiền hoàn toàn khác với thời gian xác định trước. cho một s –

+0

@Bizarro, nó hoạt động ở đây: http://jsfiddle.net/eXJQB/. –

+0

thx, nó hoạt động ... nếu bạn nhìn bạn thấy rằng tất cả các lớp được áp dụng cùng một lúc (tất cả chúng đều chuyển sang màu xanh chính xác cùng một lúc) thì tất cả chúng biến mất trong các khoảng thời gian khác nhau. Tôi cần lớp được áp dụng cho chỉ một mục danh sách, sau khi thời gian trôi qua, THEN được áp dụng cho mục danh sách tiếp theo –

39

Chỉ cần thêm, bạn có thể sử dụng một số .queue:

$('ul li:nth-child(1)').addClass("go") 
         .delay(4500) 
         .queue(function() { 
          $(this).removeClass("go"); 
          $(this).dequeue(); 
         }); 
+1

Ah Tôi quên mất +1 này. Đừng quên '.dequeue()' hoặc 'next()' mặc dù! –

+1

@ Box9 - Điểm tốt. Tôi đã ném vào '.dequeue()'. – karim79

+1

Nó vẫn là cùng một vấn đề - các lớp học được thêm vào danh sách các mục cùng một lúc ... sau đó chúng được loại bỏ tại các thời điểm khác nhau kiểm tra: http://jsfiddle.net/bM6uY/8/ –

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