ฉันกำลังเขียน Javascript ที่โต้ตอบกับรหัสไลบรารีที่ฉันไม่ได้เป็นเจ้าของและไม่สามารถเปลี่ยนแปลงได้ (อย่างสมเหตุสมผล) จะสร้างการหมดเวลาของ Javascript ที่ใช้สำหรับแสดงคำถามถัดไปในชุดคำถามที่ จำกัด เวลา นี่ไม่ใช่รหัสจริงเพราะมันสับสนเกินความหวังทั้งหมด นี่คือสิ่งที่ห้องสมุดกำลังทำ:
....
// 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 );
ฉันต้องการที่จะนำแถบความคืบหน้าบนหน้าจอที่เติมต่อโดยการสอบสวนการจับเวลาที่สร้างขึ้นโดยquestionTime * 1000
setTimeout
ปัญหาเดียวคือดูเหมือนว่าจะไม่มีทางทำเช่นนี้ มีgetTimeout
ฟังก์ชันที่ฉันขาดหายไปหรือไม่? ข้อมูลเดียวเกี่ยวกับการหมดเวลาของ Javascript ที่ฉันสามารถพบได้นั้นเกี่ยวข้องกับการสร้างผ่านsetTimeout( function, time)
และการลบผ่านclearTimeout( id )
ไฟล์.
ฉันกำลังมองหาฟังก์ชันที่คืนค่าเวลาที่เหลืออยู่ก่อนที่การหมดเวลาจะเริ่มทำงานหรือเวลาที่ผ่านไปหลังจากการหมดเวลาถูกเรียก บาร์โค้ดความคืบหน้าของฉันมีลักษณะดังนี้:
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: ฉันจะหาเวลาที่เหลืออยู่ก่อน javascript setTimeout () ได้อย่างไร
นี่คือวิธีแก้ปัญหาที่ฉันใช้อยู่ตอนนี้ ฉันอ่านส่วนห้องสมุดที่รับผิดชอบการทดสอบและถอดรหัสรหัส (แย่มากและต่อต้านการอนุญาตของฉัน)
// 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 );
และนี่คือรหัสของฉัน:
// wrapper สำหรับ setTimeout ฟังก์ชัน mySetTimeout (func, timeout) { หมดเวลา [n = setTimeout (func, หมดเวลา)] = { เริ่มต้น: วันที่ใหม่ (). getTime (), สิ้นสุด: วันที่ใหม่ (). getTime () + หมดเวลา t: หมดเวลา } กลับ n; }
สิ่งนี้ใช้งานได้ดีในเบราว์เซอร์ใด ๆ ที่ไม่ใช่ IE 6 แม้แต่ iPhone ดั้งเดิมที่ฉันคาดหวังว่าสิ่งต่างๆจะได้รับแบบอะซิงโครนัส