2011-10-23 37 views
21
function slide() 
{ 
    if($('.current').is(':last-child')){ 
     $('.current').removeClass('.current'); 
     $('#imgholder').first().addClass('.current'); 
     $('#imgholder').animate({left: '3920px'}); 
    } 
    else{ 
     $nxt=$(".current"); 
     $(".current").removeClass("current"); 
     $nxt.next().addClass("current"); 
     $('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' }); 
     } 
} 
var loop_handle= setTimeout("slide()",'3000'); 

Tôi đã đặt mã này trong phần tiêu đề và setTimeout chạy chỉ một lầnsetTimeout chỉ chạy một lần?

plz giúp đỡ plz thấy http://www.beta.storeji.in/

+0

mọi câu trả lời đều đúng Tôi nghĩ về setInterval trả lời để phê duyệt ??? – pahnin

Trả lời

56

setTimeout chỉ nên chạy một lần. Bạn đang tìm kiếm setInterval.

var loop_handle = setInterval(slide, 3000); 

Ngoài ra, đối số thứ hai phải là số, không phải là chuỗi. Khi cuộc gọi hàm không yêu cầu bất kỳ đối số nào, tốt hơn là tham chiếu đến hàm thay vì sử dụng chuỗi. Một chuỗi sẽ được chuyển đổi thành một hàm. Hàm này sẽ được thực hiện trong phạm vi của cửa sổ.

setInterval("slide()", 3000); 
//becomes 
    setInterval(Function("slide();"), 3000); 
2

Vâng, setTimeout chỉ chạy một lần. Bạn cần setInterval.

2

Đó là vì setTimeout() được cho là chỉ chạy một lần. Để kích hoạt sự kiện trên khoảng thời gian đã đặt, người dùng setInterval().

5

Bạn chỉ gọi nó một lần, vì vậy nó sẽ chỉ thực hiện một lần.

Có lẽ bạn đang nghĩ đến "setInterval()".

Khi bạn gọi nó, bằng cách này, chỉ cần vượt qua tên của hàm và không phải là một chuỗi:

setInterval(slide, 3000); 
4

Các setTimeout chức năng chỉ chạy một lần! Nếu bạn muốn chạy nó trong thời gian hơn, bạn nên sử dụng setInterval:

var loop_handle= setInterval("slide()",'3000'); 

Ngoài ra bạn có thể sử dụng setTimeout trong phần cuối của slide() chức năng để tái thiết thời gian chờ một lần nữa:

var loop_handle; 
function slide() { 
    if($('.current').is(':last-child')) { 
     $('.current').removeClass('.current'); 
     $('#imgholder').first().addClass('.current'); 
     $('#imgholder').animate({left: '3920px'}); 
    } 
    else { 
     $nxt=$(".current"); 
     $(".current").removeClass("current"); 
     $nxt.next().addClass("current"); 
     $('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' }); 
    } 
    loop_handle = setTimeout("slide()",'3000'); 
} 
loop_handle = setTimeout("slide()",'3000'); 
+1

Tuyệt. nhưng bạn có thể làm điều này cho hiệu suất tốt hơn một chút: var selector = $ ('# imgholder'); selector.dowhatever – Shahin

0

sử dụng setTimeout với đệ quy (vòng lặp vô tận)

Nếu bạn muốn giữ khoảng cách chính xác giữa mỗi lần sử dụng chức năng, hãy sử dụng setTimeout thay vì setInterval. setInterval có thể trùng lặp tại một số điểm và hành vi này thường không được mong đợi.

(function test(){ 
    setTimeout(function(){ 
    console.log(1); 
    testt(); 
    }, 2000) 
})() 
0

Vấn đề này thường xảy ra khi bạn sử dụng setTimeout trong vòng lặp đệ quy, ví dụ như trong callback ajax và khi bạn muốn chạy một cái gì đó ra khỏi đệ quy, bạn mong đợi setTimeout để làm việc như trước đây. nhớ sử dụng setInterval trong các hàm không đệ quy.

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