Tôi đang viết một số Javascript tương tác với mã thư viện mà tôi không sở hữu và không thể (hợp lý) thay đổi. Nó tạo ra thời gian chờ Javascript được sử dụng để hiển thị câu hỏi tiếp theo trong một loạt các câu hỏi giới hạn thời gian. Đây không phải là mã thực vì nó bị xáo trộn ngoài mọi hy vọng. Đây là những gì thư viện đang làm:
....
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = setTimeout( showNextQuestion(questions[i+1]), t );
Tôi muốn đặt một thanh tiến trình trên màn hình lấp đầy questionTime * 1000
bằng cách hỏi bộ hẹn giờ được tạo bởi setTimeout
. Vấn đề duy nhất là, dường như không có cách nào để làm điều này. Có getTimeout
chức năng nào mà tôi đang thiếu không? Thông tin duy nhất về thời gian chờ của Javascript mà tôi có thể tìm thấy chỉ liên quan đến việc tạo setTimeout( function, time)
và xóa thông qua clearTimeout( id )
.
Tôi đang tìm một hàm trả về thời gian còn lại trước khi hết thời gian kích hoạt hoặc thời gian trôi qua sau khi hết thời gian được gọi. Mã vạch tiến trình của tôi trông như thế này:
var timeleft = getTimeout( test.currentTimeout ); // I don't know how to do this
var $bar = $('.control .bar');
while ( timeleft > 1 ) {
$bar.width(timeleft / test.defaultQuestionTime * 1000);
}
tl; dr: Làm cách nào để tìm thời gian còn lại trước một javascript setTimeout ()?
Đây là giải pháp tôi đang sử dụng bây giờ. Tôi đã xem qua phần thư viện phụ trách các bài kiểm tra và giải mã (tồi tệ và chống lại quyền của tôi).
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = mySetTimeout( showNextQuestion(questions[i+1]), t );
và đây là mã của tôi:
// trình bao bọc cho setTimeout function mySetTimeout (func, timeout) { hết giờ [n = setTimeout (func, timeout)] = { start: new Date (). getTime (), end: new Date (). getTime () + timeout t: thời gian chờ } trả về n; }
Điều này hoạt động khá tốt trên bất kỳ trình duyệt nào không phải là IE 6. Ngay cả iPhone ban đầu, nơi tôi mong đợi mọi thứ trở nên không đồng bộ.