আমি কোনও ফাংশনের অভ্যন্তরে এই সেটটি কীভাবে পরিষ্কার করব?


163

সাধারণত, আমি একটি ভেরিয়েবলের ব্যবধানটি সেট করেছিলাম এবং তারপরে এটি সাফ করতাম var the_int = setInterval(); clearInterval(the_int);তবে আমার কোডটি কাজ করার জন্য আমি এটি একটি বেনাম ফাংশনে রেখেছি:

function intervalTrigger() {
  setInterval(function() {
    if (timedCount >= markers.length) {
      timedCount = 0;
    }

    google.maps.event.trigger(markers[timedCount], "click");
    timedCount++;
  }, 5000);
};

intervalTrigger();

আমি কীভাবে এটি পরিষ্কার করব? আমি এটিকে একটি শট দিয়েছি এবং var test = intervalTrigger(); clearInterval(test);নিশ্চিত হওয়ার চেষ্টা করেছি, তবে এটি কার্যকর হয়নি।

মূলত, আমার গুগল ম্যাপটি ক্লিক করার পরে ট্রিগার বন্ধ করা আমার এই দরকার

google.maps.event.addListener(map, "click", function() {
  //stop timer
});

উত্তর:


263

setIntervalপদ্ধতি একটি হ্যান্ডল যে আপনার বিরতি পরিষ্কার করতে ব্যবহার করতে পারেন ফেরৎ। আপনি যদি ফাংশনটি এটি ফিরিয়ে দিতে চান তবে আপনি কেবল পদ্ধতি কলের ফলাফলটি ফিরিয়ে দিন:

function intervalTrigger() {
  return window.setInterval( function() {
    if (timedCount >= markers.length) {
       timedCount = 0;
    }
    google.maps.event.trigger(markers[timedCount], "click");
    timedCount++;
  }, 5000 );
};
var id = intervalTrigger();

তারপরে বিরতি পরিষ্কার করতে:

window.clearInterval(id);

2
দ্রষ্টব্য: আপনার বিশ্বব্যাপী সুযোগটি উল্লেখ করার দরকার নেই। setIntervalঠিক পাশাপাশি কাজ করে window.setInterval
সামি বেঞ্চেরিফ

10
// Initiate set interval and assign it to intervalListener
var intervalListener = self.setInterval(function () {someProcess()}, 1000);
function someProcess() {
  console.log('someProcess() has been called');
  // If some condition is true clear the interval
  if (stopIntervalIsTrue) {
    window.clearInterval(intervalListener);
  }
}


-4

সবচেয়ে সহজ উপায় আমি ভাবতে পারি: একটি ক্লাস যুক্ত করুন।

কেবল একটি ক্লাস যুক্ত করুন (যে কোনও উপাদানটিতে) এবং সেখানে বিরতি রয়েছে কিনা তা পরীক্ষা করে দেখুন। এটি অন্য যে কোনও উপায়ে তুলনামূলক বেশি নির্ভরযোগ্য, স্বনির্ধারিত এবং ক্রস-ল্যাঙ্গুয়েজ, আমি বিশ্বাস করি।

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/unpause</button></p>

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