জাভাস্ক্রিপ্টে সেট ইন্টারন্টারভাল কল বন্ধ করুন


1398

আমি setInterval(fname, 10000);জাভাস্ক্রিপ্টে প্রতি 10 সেকেন্ডে একটি ফাংশন কল করতে ব্যবহার করছি । কোনও ইভেন্টে এটি বলা বন্ধ করা কি সম্ভব?

আমি চাই যে ব্যবহারকারী বারবার ডেটা রিফ্রেশ বন্ধ করতে সক্ষম হন।

উত্তর:


2160

setInterval()একটি বিরতি আইডি প্রদান করে, যা আপনি এতে পাস করতে পারেন clearInterval():

var refreshIntervalId = setInterval(fname, 10000);

/* later */
clearInterval(refreshIntervalId);

setInterval()এবং এর জন্য দস্তাবেজগুলি দেখুন clearInterval()


41
'ক্লিয়ারইন্টারভাল ()' দিয়ে থামার পরে আপনি কীভাবে এটি আবার শুরু করতে পারেন? আমি যদি এটি পুনঃসূচনা করার চেষ্টা করি তবে আমি 2x সেট ইনটারভাল চলমান।
ড্যান

7
আমিও প্রতিবারই আমি সেটইন্টারভাল ব্যবহার করতে চাই (মাই ফাংশন, 4000); এটি দ্রুত এবং দ্রুততর হয়, প্রতিবার 2x বার দ্রুত :( আমি কীভাবে একটি সেটিনটারওয়াল পুনরায় চালু করতে পারি ??
আলিরেজা মাসালি

14
সেটইন্টারওয়াল () আপনি যে গতিটি পাস করেছেন তা পরিবর্তন করে না। আপনি সেটইন্টারওয়াল () কল করে প্রতিবার এটি যে গতি সম্পন্ন করছে তা যদি হয় তবে আপনার একাধিক টাইমার রয়েছে যা একই সাথে চলছে এবং একটি নতুন প্রশ্ন খোলার উচিত।
এপিকভয়েজ

29
আপনি এটি বন্ধ করে দিচ্ছেন তা নিশ্চিত করুন। পরিবর্তনশীল স্কোপিংয়ের কারণে আপনার কাছে কল করার জন্য সঠিক আইডি নাও থাকতে পারে clearInterval। আমি window.refreshIntervalIdস্থানীয় ভেরিয়েবলের পরিবর্তে ব্যবহার করেছি এবং এটি দুর্দান্ত কাজ করে!
osa

2
আমি এর সাথে যুক্ত উপাদান (যখন প্রাসঙ্গিক) সাথে সেট ইনটার্ভাল হ্যান্ডেলটি সংযুক্ত করতে শুরু করেছি: $('foo').data('interval', setInterval(fn, 100));এবং তারপরে এটি সাফ করাতে clearInterval($('foo').data('interval'));আমি নিশ্চিত যে এটি করার একটি নন- জিকুয়ের উপায়ও রয়েছে।
মাইকেল - ক্লে শিরকি

105

আপনি যদি setIntervalকোনও চলকের ফেরতের মান সেট করেন তবে আপনি clearIntervalএটি বন্ধ করতে ব্যবহার করতে পারেন ।

var myTimer = setInterval(...);
clearInterval(myTimer);

আমি এই এবং জন এর উত্তর মধ্যে পার্থক্য দেখতে পাচ্ছি না
বব্রটুপো

51

আপনি একটি নতুন ভেরিয়েবল সেট করতে পারেন এবং এটি প্রতিবার চালিত হলে এটি ++ (একটি গণনা করুন) দিয়ে বাড়িয়ে তোলাতে পারেন, তারপরে আমি এটি শেষ করার জন্য একটি শর্তাধীন বিবৃতি ব্যবহার করি:

var intervalId = null;
var varCounter = 0;
var varName = function(){
     if(varCounter <= 10) {
          varCounter++;
          /* your code goes here */
     } else {
          clearInterval(intervalId);
     }
};

$(document).ready(function(){
     intervalId = setInterval(varName, 10000);
});

আমি আশা করি এটি সাহায্য করে এবং এটি সঠিক।


3
আমি এই কাজ করে জানতে পেরে অবাক হয়েছি clearInterval(varName);clearIntervalফাংশনটির নামটি পাস করার পরে আমি কাজ না করার প্রত্যাশা করেছি , আমি ভেবেছিলাম এটির অন্তর আইডি দরকার। আমি মনে করি এটি কেবলমাত্র যদি আপনার একটি নামকৃত ফাংশন থাকে তবে এটি কাজ করতে পারে কারণ আপনি কোনও বেনামে ফাংশনটি নিজের ভেরিয়েবল হিসাবে পাস করতে পারবেন না।
প্যাট্রিক এম

31
আসলে আমি মনে করি এটি কার্যকর হয় না। কাউন্টারে বিধিনিষেধের কারণে কোডটি কার্যকর করা বন্ধ করা হয়েছে, তবে বিরতিটি varName () গুলি চালিয়ে চলেছে। ক্লিয়ারইন্টারওয়াল () (অন্য ক্লজের অভ্যন্তরে) এর পরে যেকোন কিছুতে লগ ইন করার চেষ্টা করুন এবং আপনি দেখতে পাবেন এটি চিরতরে লেখা হচ্ছে।
রাফায়েল অলিভিরা

5
এমন কোনও কাজের জন্য এতগুলি উত্সাহ যা কাজ করে না, কখনও কখনও আমি এসও তে লোককে বুঝতে পারি না: পি
স্ট্র্যান্ডড কিড

2
$(document).ready(function(){ });jQuery হয়, এজন্য এটি কাজ করে না। এটি অন্তত উল্লেখ করা উচিত ছিল।
প্যাডটটক

4
@ ওমগ্রান্ট, কাজ না করে এমন একটি উদাহরণ ছাড়াও আপনার একটি ভেরিয়েবল রয়েছে varNameযা একটি নামবিহীন ফাংশন সংরক্ষণ করে - ওয়াহা ?? আইএমএইচও, আপনার এই উত্তরটি পরিবর্তন করা উচিত নয় down
ডিন র‌্যাডক্লিফ

13

উপরের উত্তরগুলি ইতিমধ্যে ব্যাখ্যা করেছে যে কীভাবে সেটআইন্টারওয়াল একটি হ্যান্ডেল ফেরত দেয় এবং কীভাবে এই হ্যান্ডেলটি ব্যবধান টাইমার বাতিল করতে ব্যবহৃত হয়।

কিছু স্থাপত্য বিবেচনা:

দয়া করে "স্কোপ-কম" ভেরিয়েবলগুলি ব্যবহার করবেন না। সবচেয়ে নিরাপদ উপায় হল কোনও ডিওএম অবজেক্টের বৈশিষ্ট্যটি ব্যবহার করা। সবচেয়ে সহজ জায়গাটি "নথি" হবে। যদি রিফ্রেশারটি একটি স্টার্ট / স্টপ বোতাম দ্বারা শুরু হয়, আপনি নিজেই বোতামটি ব্যবহার করতে পারেন:

<a onclick="start(this);">Start</a>

<script>
function start(d){
    if (d.interval){
        clearInterval(d.interval);
        d.innerHTML='Start';
    } else {
        d.interval=setInterval(function(){
          //refresh here
        },10000);
        d.innerHTML='Stop';
    }
}
</script>

যেহেতু বোতামটি ক্লিক করে হ্যান্ডলারের ভিতরে ফাংশনটি সংজ্ঞায়িত করা হয়েছে, আপনাকে আবার এটি সংজ্ঞায়িত করতে হবে না। আবার বোতামটি ক্লিক করা থাকলে টাইমারটি আবার চালু করা যেতে পারে।


1
কি তে এটি নির্বাণ সম্পর্কে ভালো documentচেয়ে window?
একাতুফায়

1
সংশোধন। আমি ডকুমেন্ট.বডি বলতে চাইছিলাম আমার কোড উদাহরণে আমি কার্যকরভাবে বোতামটি নিজেই ব্যবহার করছি। বোতামটির জন্য কোনও আইডি নেই, তবে "এই" পয়েন্টারটি ফাংশনে "ডি" প্যারামিটারের সাথে আবদ্ধ। স্কোপ হিসাবে "উইন্ডো" ব্যবহার করা ঝুঁকিপূর্ণ কারণ ফাংশনগুলিও সেখানে। উদাহরণস্বরূপ, "ফাংশন টেস্ট () {}" উইন্ডো.টেস্টের মাধ্যমে অ্যাক্সেসযোগ্য, যা মোটেও স্কোপ ব্যবহার না করার মতো, কারণ এটি একটি শর্টহ্যান্ড। আশাকরি এটা সাহায্য করবে.
শচিয়ান

1
"স্কোপ-কম" ভেরিয়েবলগুলি হারাবেন না -> "স্কোপ-কম" ব্যবহার করবেন না আমি এটি সম্পাদনা করতাম তবে পরিবর্তনটি 6 টির চেয়ে কম অক্ষর, এবং ত্রুটি বিভ্রান্তিকর।
লিফ নেল্যান্ড 12

2
তার জন্য আপনার ডোম দরকার নেই। বৈশ্বিক সুযোগ দূষণ এড়ানোর জন্য কেবল আমাদের একটি আইআইএফই।
ওনুর ইল্ডারিয়াম

1
এটিকে আবার কাজ করার জন্য আমাকে 'd.interval = অপরিজ্ঞাত' যুক্ত করতে হবে inner কারণ এর মতো কেবল একটি সময় কাজ করে।
jocmtb

11

ইতিমধ্যে জবাব দেওয়া হয়েছে ... তবে আপনার যদি এমন একটি বৈশিষ্ট্যযুক্ত, পুনরায় ব্যবহারযোগ্য টাইমারের প্রয়োজন হয় যা বিভিন্ন বিরতিতে একাধিক কার্যকে সমর্থন করে তবে আপনি আমার টাস্কটাইমার ব্যবহার করতে পারেন (নোড এবং ব্রাউজারের জন্য)।

// Timer with 1000ms (1 second) base interval resolution.
const timer = new TaskTimer(1000);

// Add task(s) based on tick intervals.
timer.add({
    id: 'job1',         // unique id of the task
    tickInterval: 5,    // run every 5 ticks (5 x interval = 5000 ms)
    totalRuns: 10,      // run 10 times only. (omit for unlimited times)
    callback(task) {
        // code to be executed on each run
        console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
        // stop the timer anytime you like
        if (someCondition()) timer.stop();
        // or simply remove this task if you have others
        if (someCondition()) timer.remove(task.id);
    }
});

// Start the timer
timer.start();

আপনার ক্ষেত্রে, যখন ব্যবহারকারীরা ডেটা-রিফ্রেশকে বিঘ্নিত করার জন্য ক্লিক করেন; তাদের যদি আবার সক্ষম করার দরকার হয় timer.pause()তবে আপনি কল করতে পারেন timer.resume()

আরও এখানে দেখুন ।


6

ক্লিয়ারইন্টারওয়াল () পদ্ধতিটি টাইমারের সেটটি সেটআইন্টারভাল () পদ্ধতির সাহায্যে পরিষ্কার করতে ব্যবহার করা যেতে পারে।

সেটআইন্টারভাল সর্বদা একটি আইডি মান দেয়। এই মানটি টাইমার বন্ধ করার জন্য ক্লিয়ারইন্টারওয়াল () এ পাস করা যেতে পারে। এখানে টাইমার উদাহরণ 30 থেকে শুরু হয় এবং এটি 0 হয়ে গেলে থেমে যায়।

  let time = 30;
  const timeValue = setInterval((interval) => {
  time = this.time - 1;
  if (time <= 0) {
    clearInterval(timeValue);
  }
}, 1000);

5

@cnu,

আপনি বিরতি থামাতে পারবেন, যখন ইউআর কনসোল ব্রাউজার (এফ 12) দেখার আগে কোড চালানোর চেষ্টা করবেন ... মন্তব্যটি পরিষ্কার করার চেষ্টা করুন অন্তর্বর্তী (ট্রিগার) আবার কনসোল দেখায়, বিউটিফায়ার নয়? : P: P

একটি উত্স উদাহরণ দেখুন:

var trigger = setInterval(function() { 
  if (document.getElementById('sandroalvares') != null) {
    document.write('<div id="sandroalvares" style="background: yellow; width:200px;">SandroAlvares</div>');
    clearInterval(trigger);
    console.log('Success');
  } else {
    console.log('Trigger!!');
  }
}, 1000);
<div id="sandroalvares" style="background: gold; width:200px;">Author</div>


3

সেটইন্টারভাল (...) থেকে ফেরত মান নির্ধারণের জন্য ভেরিয়েবল ঘোষণা করুন এবং নির্ধারিত ভেরিয়েবলটি ক্লিয়ারইন্টারভাল () এ পাস করুন;

যেমন

var timer, intervalInSec = 2;

timer = setInterval(func, intervalInSec*1000, 30 ); // third parameter is argument to called function 'func'

function func(param){
   console.log(param);
}

// যে কোনও জায়গায় আপনি টাইমার অ্যাক্সেস করেছেন উপরে কল ক্লিয়ারইন্টারভাল ঘোষণা করেছেন

$('.htmlelement').click( function(){  // any event you want

       clearInterval(timer);// Stops or does the work
});

1
var keepGoing = true;
setInterval(function () {
     if (keepGoing) {
        //DO YOUR STUFF HERE            
        console.log(i);
     }
     //YOU CAN CHANGE 'keepGoing' HERE
  }, 500);

"স্টপ-ইন্টারভাল" আইডি সহ একটি বোতাম বলতে আইটেম শ্রোতাদের যোগ করে আপনিও বিরতি থামাতে পারেন:

$('buuton#stop-interval').click(function(){
   keepGoing = false;
});

এইচটিএমএল:

<button id="stop-interval">Stop Interval</button>

দ্রষ্টব্য: বিরতিটি এখনও কার্যকর করা হবে, যদিও কিছুই হবে না।


2
এটি প্রকৃতপক্ষে পারফরম্যান্সের জন্য ফিরে এসেছে, এবং ব্যাকগ্রাউন্ড ট্যাবগুলির জন্য, এটি অন্যান্য সমস্ত টাইমারকে অনেকটা কমিয়ে দেয় যেহেতু টাইমার এবং অন্তরগুলি ব্যাকগ্রাউন্ড ট্যাবগুলির জন্য
থ্রোল্ট করা হয়

1

10 সেকেন্ড পরে টাইমার থামানোর জন্য আমি ক্লিয়ারইন্টারওয়াল () পদ্ধতিটি এভাবে ব্যবহার করেছি।

function startCountDown() {
  var countdownNumberEl = document.getElementById('countdown-number');
  var countdown = 10;
  const interval = setInterval(() => {
    countdown = --countdown <= 0 ? 10 : countdown;
    countdownNumberEl.textContent = countdown;
    if (countdown == 1) {
      clearInterval(interval);
    }
  }, 1000)
}
<head>
  <body>
    <button id="countdown-number" onclick="startCountDown();">Show Time </button>
  </body>
</head>


1

কিছু সময়ের পরে অন্তর বন্ধ করতে সেটটাইমআউট ব্যবহার করুন।

var interVal = setInterval(function(){console.log("Running")  }, 1000);
 setTimeout(function (argument) {
    clearInterval(interVal);
 },10000);

0

আমি অনুমান করি যে নিম্নলিখিত কোডগুলি সাহায্য করবে:

var refreshIntervalId = setInterval(fname, 10000);

clearInterval(refreshIntervalId);

আপনি কোডটি 100% সঠিক করেছেন ... তাই ... সমস্যা কী? অথবা এটি একটি টিউটোরিয়াল ...


-3

কেন একটি সহজ পদ্ধতির ব্যবহার করবেন না? একটি ক্লাস যুক্ত করুন!

কেবল একটি ক্লাস যুক্ত করুন যা অন্তরকে কিছু না করতে বলে tells উদাহরণস্বরূপ: হোভারে।

var i = 0;
this.setInterval(function() {
  if(!$('#counter').hasClass('pauseInterval')) { //only run if it hasn't got this class 'pauseInterval'
    console.log('Counting...');
    $('#counter').html(i++); //just for explaining and showing
  } else {
    console.log('Stopped counting');
  }
}, 500);

/* In this example, I'm adding a class on mouseover and remove it again on mouseleave. You can of course do pretty much whatever you like */
$('#counter').hover(function() { //mouse enter
    $(this).addClass('pauseInterval');
  },function() { //mouse leave
    $(this).removeClass('pauseInterval');
  }
);

/* Other example */
$('#pauseInterval').click(function() {
  $('#counter').toggleClass('pauseInterval');
});
body {
  background-color: #eee;
  font-family: Calibri, Arial, sans-serif;
}
#counter {
  width: 50%;
  background: #ddd;
  border: 2px solid #009afd;
  border-radius: 5px;
  padding: 5px;
  text-align: center;
  transition: .3s;
  margin: 0 auto;
}
#counter.pauseInterval {
  border-color: red;  
}
<!-- you'll need jQuery for this. If you really want a vanilla version, ask -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<p id="counter">&nbsp;</p>
<button id="pauseInterval">Pause</button></p>

আমি যুগ যুগ ধরে এই দ্রুত এবং সহজ পদ্ধতির সন্ধান করছি, তাই আমি যতটা সম্ভব লোকের সাথে এটি পরিচয় করানোর জন্য বিভিন্ন সংস্করণ পোস্ট করছি।


17
আমার কাছে সত্যিই সহজ বলে মনে হচ্ছে না ... আমি এও মনে করি যে কিছু না করে এমন ফাংশনে কল রাখার পরিবর্তে আপনার অন্তরগুলি সরিয়ে নেওয়া আরও পরিষ্কার।
রোমেন ব্রাউন 18

আমি রাজি নই। this.setInterval(function() { if(!$('#counter').hasClass('pauseInterval')) { //do something } }, 500);আপনার কোডের জন্য সমস্ত কিছু তদতিরিক্ত, চেকটি আপনি প্রথম কাজটি করেন, সুতরাং যখন এটি আড়াআড়ি করা হয় তখন খুব হালকা ওজনের হয়। এটি এটার জন্য যা: অস্থায়ীভাবে কোনও ক্রিয়াকলাপ বিরতি । আপনি যদি অনির্দিষ্টকালের জন্য এটি বন্ধ করতে চান: অবশ্যই আপনি অন্তর সরিয়ে ফেলুন।
আর্ট ডেন ব্র্যাবার

এটি ভোট দেওয়ার পরিমাণে এবং সাধারণভাবে নিরুৎসাহিত হয়। এটি কেবলমাত্র (সম্ভাব্য) অকেজো চেক করতে স্বল্প শক্তিধর রাজ্যগুলি থেকে সিপিইউ জাগাবে। এটি এই উদাহরণে 0 থেকে 500 এমএসের মধ্যে অবিলম্বে প্রতিক্রিয়াটি বিলম্ব করে।
চার্লি

আমি 2 বছর আগে কোডটি লেখার পরেও আমি সম্পূর্ণরূপে আপনার সাথে একমত নই। কাউন্টারটি অবশ্যই সেখানে থাকতে হবে, কারণ ওপি এটি চেয়েছিল। অবশ্যই, আপনি যদি কোনও বোতাম টিপানোর পরে কাউন্টারটি থামানোর জন্য এটি ব্যবহার করছেন, উদাহরণস্বরূপ, এটি একটি উপ-অনুকূল সমাধান হতে পারে, তবে ঘোরাফেরা করার সময় কেবল বিরতি দেওয়ার জন্য, এটি সহজলভ্য সমাধানগুলির মধ্যে একটি।
আর্ট ড্যান ব্র্যাবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.