2011-01-31 30 views
5

Tôi có một chức năng nhưng nó vẫn hoạt động ngay cả khi tôi gọi số stop(). Các tên hàm là function slide() { //codes here }Làm cách nào để dừng chạy một chức năng?

slide().stop(); 

Làm thế nào để ngăn chặn nó từ chạy?
Và làm thế nào để chạy lại sau khi dừng?
Vì vậy, tôi sẽ có toàn quyền kiểm soát nó.

+1

'.slide' không phải là phương thức đã biết trong giao diện người dùng jQuery hoặc jQuery.Bạn có đang sử dụng plugin tùy chỉnh triển khai phương pháp này hay bạn có thể tham chiếu đến '.slideUp' hoặc' .slideDown'? – mekwall

+0

slide() là tên hàm của tôi, nó có nhiều mã bên trong. – Ryan

+2

'stop' của jquery chỉ hoạt động trên hình động jquery – sje397

Trả lời

9

.stop là một phương pháp để dừng hoạt ảnh đang chạy không đồng bộ (trong nền) trên phần tử hiện tại. Nó không làm gián đoạn/dừng bất kỳ mã nào khác không sử dụng thư viện hiệu ứng.

Thay vào đó, bạn nên xem .queue cho phép bạn thiết lập hàng đợi tùy chỉnh mà bạn có thể xóa hoặc xóa.

Đã có câu trả lời rất hay về cách sử dụng .queue vì vậy tôi sẽ chỉ cho bạn câu hỏi đó thay thế: Can somebody explain jQuery queue to me? - Nhìn vào câu trả lời của gnarf.

+0

Tôi nên làm gì sau đó? nếu nó không dừng()? – Ryan

1

Nếu chức năng của bạn là một quá trình javascript chạy dài, bạn nên đặt một số loại móc bên ngoài vào nó để ngăn chặn quá trình thực hiện và tiếp tục khi muốn. Nếu bạn có một vòng lặp while trong nó, bạn nên kiểm tra đối với một điều kiện bên ngoài để dừng việc thực hiện nó. Nếu bạn không có một vòng lặp theo nghĩa thông thường của nó, bạn sẽ phải tìm một số cách khác để kiểm tra trạng thái đang chạy của hàm đang chạy.

Thông thường, không thể gián đoạn chức năng đang chạy trong Javascript. Không phải không có bất kỳ mã bổ sung nào.

Chức năng chạy dài sẽ bị gián đoạn bởi trình duyệt bằng cách yêu cầu người dùng cho dù họ muốn tập lệnh tiếp tục thực thi hay dừng nó lại (trình duyệt giả định thực thi đã bị treo như trong vòng lặp vô hạn).

Nếu bạn có một chức năng chạy dài trong Javascript, bạn nên chia fnctionality thành nhiều phần và sử dụng javascript luồng kỹ thuật mà trì hoãn thực hiện các chức năng ngắn cái khác bằng phương tiện của window.setTimeout(function, delay);

4

Nếu nó chạm một số điều kiện trong chức năng trượt của bạn chỉ cần sử dụng câu lệnh return; để thoát khỏi chức năng. Sau đó, để bắt đầu lại, chỉ cần nhớ hàm slide(). Bạn không thể sử dụng mã từ bên ngoài hàm để làm cho nó thoát, nó phải nằm trong hàm.

2

Đã cùng một vấn đề và sau khi đọc câu trả lời cuối bởi amurra đây là những gì tôi đã làm ...

khai báo một biến toàn cầu bằng cách gắn nó vào đối tượng 'cửa sổ'. Điều này sẽ hoạt động như một lá cờ và quyết định có nên tiếp tục gọi các 'slide_it()' chức năng hoặc để ngăn chặn nó (trở về)

window.slide_it = true; 

$(element).on({ 

    mouseenter: 
     function() { 
      window.slide_it = true; 
      slide_it(); 
     } 

    mouseleave: 
     function() { 
      window.slide_it = false; 
     } 

}); 

function slide_it() { 

    if(!window.slide_it) 
     return false; 

    $(element).stop().animate( 
     { 
      'left':'-=5px' 
     }, 
     100, 
     function() { slide_it() } 
    ); 

} 

Khi bạn nhập chuột trên $ (element) các slide_it() chức năng sẽ tự lặp lại. Và nó sẽ dừng lại chỉ khi window.slide_it được đặt thành false. Vì vậy, bạn chỉ cần đặt window.slide_it thành false khi "mouseleave" s

Hy vọng nó sẽ giúp người khác gặp sự cố!

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