কীভাবে সেটইন্টারভাল এবং ক্লিয়ারইন্টারওয়াল ব্যবহার করবেন?


138
function doKeyDown(event) {
    switch (event.keyCode) {
    case 32:
        /* Space bar was pressed */
        if (x == 4) {
            setInterval(drawAll, 20);
        }
        else {
            setInterval(drawAll, 20);
            x += dx;
        }
        break;
    }
}

হাই সব,

আমি কল করতে চান drawAll()একবার একটি তৈরি করছে না লুপ যে কল drawAllআবার এবং আবার, আমি যে জন্য রিকার্সিভ পদ্ধতি ব্যবহার করা উচিত অথবা আমি ব্যবহার করা উচিত clearInterval?

এছাড়াও দয়া করে আমাকে বলুন clearInterval? ধন্যবাদ :)

উত্তর:


210

setIntervalএকটি পুনরাবৃত্তি টাইমার সেট আপ । এটি একটি হ্যান্ডেল ফেরত দেয় যা আপনি clearIntervalএটিকে গুলি চালানো থেকে বিরত রাখতে প্রবেশ করতে পারেন :

var handle = setInterval(drawAll, 20);

// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval

ব্রাউজারগুলিতে, হ্যান্ডেলটি এমন একটি সংখ্যা হিসাবে গ্যারান্টিযুক্ত যা সমান নয় 0; তাই0 "নো টাইমার সেট" এর জন্য একটি কার্যকর পতাকা মান তৈরি করে। (অন্যান্য প্ল্যাটফর্মগুলি অন্য মানগুলি ফিরিয়ে দিতে পারে; নোডজেএসের টাইমার ফাংশনগুলি কোনও বস্তু ফেরত দেয়, উদাহরণস্বরূপ))

শুধুমাত্র একবার জ্বলতে ফাংশন নির্ধারণের জন্য , setTimeoutপরিবর্তে ব্যবহার করুন। এটি গুলি চালিয়ে যাবে না। (এটি এমন একটি হ্যান্ডেলও ফেরত দেয় যা আপনি clearTimeoutযদি এটি উপযুক্ত হয় তবে একবারে গুলি চালানোর আগে এটি বাতিল করার জন্য ব্যবহার করতে পারেন ))

setTimeout(drawAll, 20);

29

ক্লিয়ারইন্টারওয়াল একটি বিকল্প:

var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec 
function doStuff() {
  alert('this is a 2 second warning');
  clearInterval(interval);
}

7
কখনো সঙ্গে স্ট্রিং ব্যবহার setIntervalবা setTimeout
টিজে ক্রাউডার

1
আপনার মানে আমার doStuff () এর চারপাশে থাকা উক্তিগুলি সরিয়ে নেওয়া উচিত?
জোশুয়া - পেন্ডো

9
হ্যাঁ, উদ্ধৃতি এবং প্যারেন্স উভয়ই। কেবলমাত্র: setInterval(doStuff);। মধ্যে একটি স্ট্রিং পাসিং setIntervalএকটি অন্তর্নিহিত কল eval। পরিবর্তে ফাংশন রেফারেন্স মধ্যে পাস সেরা ।
টিজে ক্রাউডার

1
আহ ভাল, ডাউনভোটটি সম্ভবত ন্যায্য .. আমি একটি উদাহরণ দেখিয়েছি যা সঠিক নয় (যদিও এটি আমার ক্ষেত্রে কাজ করে তবে আমি কথা বলার সাথে সাথে এগুলি পরিবর্তন করছি)। থাম্বস আপ! :)
জোশুয়া - পেন্ডো

10

setTimeout(drawAll, 20)পরিবর্তে ব্যবহার করুন। এটি কেবল একবার ফাংশন সম্পাদন করে।


অনেক অনেক ধন্যবাদ, তবে সেটটাইমআউট প্রতিটি বিন্দুতে লুপ শেষ করছে, আমি অন্য পদ্ধতির এবং এর কাজ সূক্ষ্ম ব্যবহার করি, ডোকিডাউন (ইভেন্ট) {স্যুইচ (ইভেন্ট.কি কোড) 32 কেস 32: / * স্পেস বারটি চাপানো হয়েছিল * / লুপ = সেটআইন্টারভাল (ড্র সমস্ত, 20); যদি (x == 202) {x = 400; স্পিনার (); } বিরতি; }}
রাজ

এটি কোনও প্রশ্ন ছিল না
নিনো একপা্যাক

8

আমি ইলেক্ট্রন দিয়ে কৌণিক ব্যবহার করেছি,

আমার ক্ষেত্রে, setIntervalএকটি নোডেজ টাইমার অবজেক্ট দেয়। যা আমি বললে clearInterval(timerobject)এটি কার্যকর হয়নি।

আমাকে প্রথমে আইডিটি পেতে হয়েছিল এবং ক্লিয়ারইন্টারভালটিতে কল করতে হয়েছিল

clearInterval(timerobject._id)

আমি এ নিয়ে বহু ঘন্টা লড়াই করেছি। আশাকরি এটা সাহায্য করবে.


5

পার্শ্ব নোট - যদি আপনি বিরতি নির্ধারণ ও সাফ করার জন্য পৃথক ফাংশন ব্যবহার করতে চান তবে 'আপেক্ষিক বৈশ্বিক' বা 'এক স্তর পর্যন্ত' সুযোগে ব্যবধান পরিবর্তনশীলটি তাদের সবার জন্য অ্যাক্সেসযোগ্য হতে হবে:

var interval = null;    

function startStuff(func, time) {
    interval = setInterval(func, time);
}

function stopStuff() {
    clearInterval(interval);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.