আমি এমন কিছু জাভাস্ক্রিপ্ট লিখছি যা লাইব্রেরি কোডের সাথে ইন্টারেক্ট করে যা আমার নিজের নয়, এবং (যুক্তিসঙ্গত) পরিবর্তন করতে পারে না। এটি জাভাস্ক্রিপ্ট সময়সীমা সীমাবদ্ধ প্রশ্নগুলির একটি সিরিজের পরবর্তী প্রশ্নটি দেখানোর জন্য ব্যবহৃত হয়। এটি আসল কোড নয় কারণ এটি সমস্ত আশা ছাড়িয়ে গেছে। পাঠাগারটি যা করছে তা এখানে:
....
// 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
আমি অনুপস্থিত কোন ফাংশন আছে ? জাভাস্ক্রিপ্টের টাইমআউটগুলির একমাত্র তথ্য যা আমি পাই তা কেবলমাত্র তৈরির মাধ্যমে 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: জাভাস্ক্রিপ্ট সেটটাইমআউট () এর আগে কীভাবে বাকি সময়টি খুঁজে পাব?
সমাধান এখন আমি ব্যবহার করছি। আমি পরীক্ষাগারের দায়িত্বে থাকা লাইব্রেরি বিভাগটি দিয়ে গিয়েছিলাম এবং কোডটি বাতিল করেছিলাম (ভয়ানক এবং আমার অনুমতিগুলির বিপরীতে)।
// 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 );
এবং এখানে আমার কোড:
সেটটাইমআউটের জন্য // র্যাপার ফাংশন মাইসেটটাইমআউট (ফানক, সময়সীমা) { সময়সীমা [এন = সেটটাইমআউট (ফানক, সময়সীমা)] = { শুরু: নতুন তারিখ ()। গেটটাইম (), শেষ: নতুন তারিখ ()। গেটটাইম () + টাইমআউট t: সময়সীমা } রিটার্ন এন; }
এটি IE 6 নয় এমন কোনও ব্রাউজারে বেশ স্পট-অন কাজ করে Even এমনকি মূল আইফোনও, যেখানে আমি জিনিসগুলি অ্যাসিঙ্ক্রোনাস পাওয়ার আশা করছিলাম।