সময়সীমা সমাধানের পক্ষে যথেষ্ট সহজ ছিল, তবে বিরতিটি ছিল কিছুটা জটিল।
এই সমস্যাগুলি সমাধান করার জন্য আমি নিম্নলিখিত দুটি ক্লাস নিয়ে এসেছি:
function PauseableTimeout(func, delay){
this.func = func;
var _now = new Date().getTime();
this.triggerTime = _now + delay;
this.t = window.setTimeout(this.func,delay);
this.paused_timeLeft = 0;
this.getTimeLeft = function(){
var now = new Date();
return this.triggerTime - now;
}
this.pause = function(){
this.paused_timeLeft = this.getTimeLeft();
window.clearTimeout(this.t);
this.t = null;
}
this.resume = function(){
if (this.t == null){
this.t = window.setTimeout(this.func, this.paused_timeLeft);
}
}
this.clearTimeout = function(){ window.clearTimeout(this.t);}
}
function PauseableInterval(func, delay){
this.func = func;
this.delay = delay;
this.triggerSetAt = new Date().getTime();
this.triggerTime = this.triggerSetAt + this.delay;
this.i = window.setInterval(this.func, this.delay);
this.t_restart = null;
this.paused_timeLeft = 0;
this.getTimeLeft = function(){
var now = new Date();
return this.delay - ((now - this.triggerSetAt) % this.delay);
}
this.pause = function(){
this.paused_timeLeft = this.getTimeLeft();
window.clearInterval(this.i);
this.i = null;
}
this.restart = function(sender){
sender.i = window.setInterval(sender.func, sender.delay);
}
this.resume = function(){
if (this.i == null){
this.i = window.setTimeout(this.restart, this.paused_timeLeft, this);
}
}
this.clearInterval = function(){ window.clearInterval(this.i);}
}
এগুলি যেমন প্রয়োগ করা যেতে পারে:
var pt_hey = new PauseableTimeout(function(){
alert("hello");
}, 2000);
window.setTimeout(function(){
pt_hey.pause();
}, 1000);
window.setTimeout("pt_hey.start()", 2000);
এই উদাহরণটি একটি বিরতিযোগ্য টাইমআউট (pt_hey) সেট করবে যা সতর্কতার জন্য নির্ধারিত হয়েছে, "দ্বিতীয়" দুই সেকেন্ড পরে। আরেকটি টাইমআউট এক সেকেন্ড পরে পিটি_হয়ে বিরতি দেয়। তৃতীয় টাইমআউট দুই সেকেন্ড পরে pt_hey পুনরায় শুরু করে। পিটি_এই এক সেকেন্ডের জন্য দৌড়ায়, এক সেকেন্ডের জন্য বিরতি দেয়, তারপরে আবার চলতে শুরু করে। pt_ তারা তিন সেকেন্ড পরে ট্রিগার।
ট্র্যাকিয়ার অন্তর জন্য এখন
var pi_hey = new PauseableInterval(function(){
console.log("hello world");
}, 2000);
window.setTimeout("pi_hey.pause()", 5000);
window.setTimeout("pi_hey.resume()", 6000);
এই উদাহরণটি কনসোলে প্রতি দুই সেকেন্ডে "হ্যালো ওয়ার্ল্ড" লেখার জন্য একটি বিরতিযুক্ত ইন্টারওয়াল (পিয়াইহে) সেট করে। একটি সময়সীমা পাঁচ সেকেন্ড পরে পাই_হয় বিরতি দেয়। আর একটি টাইমআউট ছয় সেকেন্ডের পরে পাই_ইয়ে শুরু করে। সুতরাং পাই_ই দু'বার ট্রিগার করবে, এক সেকেন্ডের জন্য চলবে, এক সেকেন্ডের জন্য বিরতি দেবে, এক সেকেন্ডের জন্য দৌড়াবে এবং তারপরে প্রতি 2 সেকেন্ডে ট্রিগার চালিয়ে যাবে।
অন্যান্য ফাংশন
ক্লিয়ারটাইমআউট () এবং ক্লিয়ারইন্টারওয়াল ()
pt_hey.clearTimeout();
এবং pi_hey.clearInterval();
সময়সীমা এবং ব্যবধানগুলি সাফ করার সহজ উপায় হিসাবে পরিবেশন করুন।
getTimeLeft ()
pt_hey.getTimeLeft();
এবং pi_hey.getTimeLeft();
পরবর্তী ট্রিগারটি হওয়ার সময় নির্ধারিত হওয়া অবধি কত মিলিসেকেন্ডে ফিরে আসবে।