मैं इस सेट को कैसे साफ़ करूँ?


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 मानचित्र क्लिक करने के बाद ट्रिगर करना बंद करने की आवश्यकता है, जैसे

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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.