2011-10-07 30 views
18

Tôi đã phát triển một chút phần mềm trình bày bao gồm các trang trình bày và nội dung cho mỗi trang trình bày. Khi một trang trình bày được hiển thị, tất cả nội dung của trang được lặp qua và được hiển thị sau khi trì hoãn bằng phương pháp setTimeout. trông ngọt ngào ...Force setTimeout để kích hoạt tải trọng của nó sớm hơn thiết lập ban đầu

Yaaay !, yêu cầu đã thay đổi, bản trình bày giờ đây bắt buộc phải hoạt động như trình chiếu PowerPoint, sự kiện nhấp chuột sẽ khiến nội dung tiếp theo được hiển thị ngay lập tức.

Câu hỏi của tôi là; có cách nào gây ra thời gian chờ của tôi để bắn ngay lập tức không? Tôi có thể nhận và lưu trữ trong một ngăn xếp thời gian chờ vì nó được trả lại khi hết thời gian chờ. Tùy chọn duy nhất khác sẽ là hủy bỏ thời gian chờ và sau đó tạo lại phần tử, đó là xử lý nhiều hơn sau đó tôi muốn làm, và tôi không cảm thấy như refactoring mã của tôi quá nhiều.

Bất kỳ ý tưởng nào?

Trả lời

14

Câu trả lời ngắn gọn là số Bạn không thể làm những gì bạn đang yêu cầu, trừ khi bạn giữ danh sách các phương pháp được kích hoạt. Sau đó bạn có thể hủy hẹn giờ và kích hoạt phương thức tương ứng.

19

Nếu bạn đặt bộ đếm thời gian như thế này:

var timer1 = window.setTimeout(mainFunction,500) 

gọi nó ngay lập tức bằng cách làm này:

window.clearTimeout(timer1) 
mainFunction() 

Điều quan trọng là để tách các chức năng từ bộ đếm thời gian.

+1

poo, tôi figured tôi sẽ phải làm điều này, tôi đã hy vọng cho một sửa chữa nhanh chóng. Khi 'mainFunction' có đối số được tính toán khi thời gian chờ được đặt đầu tiên, tôi sẽ cần phải thực hiện một số Refactoring để có được chúng trên sự kiện onlick ... cảm ơn nhiều – lgados

+0

Xem câu trả lời của tôi dưới đây cho một gói đóng cửa mà tránh phải quản lý nhiều thứ hơn . Thay thế timeoutId bằng một đối tượng bằng phương thức .cancel() và .trigger(). – Killroy

16

Bạn có thể bọc nó trong một kết thúc như thế này:

function createTimeout(timeoutHandler, delay) { 
    var timeoutId; 
    timeoutId = setTimeout(timeoutHandler, delay); 
    return { 
     clear: function() { 
      clearTimeout(timeoutId); 
     }, 
     trigger: function() { 
      clearTimeout(timeoutId); 
      return timeoutHandler(); 
     } 
    }; 
} 

var a = new Date(); 

var timeout = createTimeout(function() { console.log(a); }, 1000); 
// timeout.clear(); 
timeout.trigger(); 
+1

giải pháp thanh lịch – JobaDiniz

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