JavaScript හි setInterval ඇමතුම නවත්වන්න


1413

මම setInterval(fname, 10000);ජාවාස්ක්‍රිප්ට් හි සෑම තත්පර 10 කට වරක් ශ්‍රිතයක් ඇමතීමට භාවිතා කරමි . කිසියම් සිදුවීමකට එය ඇමතීම නතර කළ හැකිද?

මට අවශ්‍ය වන්නේ නැවත නැවත දත්ත නැවුම් කිරීම නැවැත්වීමට පරිශීලකයාට හැකි වීමයි.

Answers:


2181

setInterval()ඔබට ලබා දිය හැකි කාල පරතරය හැඳුනුම්පතක් ලබා දෙයි clearInterval():

var refreshIntervalId = setInterval(fname, 10000);

/* later */
clearInterval(refreshIntervalId);

setInterval()සහ සඳහා ලියකියවිලි බලන්න clearInterval().


43
'ClearInterval ()' සමඟ නැවැත්වීමෙන් පසු ඔබට එය නැවත ආරම්භ කළ හැක්කේ කෙසේද? මම එය නැවත ආරම්භ කිරීමට උත්සාහ කළහොත් මට 2x setInterval ධාවනය වේ.
ඩෑන්

9
මාත් මට SetInterval භාවිතා කිරීමට අවශ්‍ය සෑම අවස්ථාවකම (MyFunction, 4000); එය වේගවත් හා වේගවත් වේ, සෑම වාරයක්ම 2x වේලාවක් වේගවත් වේ :( මම නැවත ආරම්භයක් ආරම්භ කරන්නේ කෙසේද ??
Alireza Masali

14
SetInterval () ඔබ එය පසු කරන වේගය වෙනස් නොකරයි. ඔබ කරන ඕනෑම දෙයක් ඔබ SetInterval () ලෙස හඳුන්වන සෑම අවස්ථාවකම වේගවත් කරන්නේ නම්, ඔබට එකවර ක්‍රියාත්මක වන බහුවිධ ටයිමරයන් ඇති අතර නව ප්‍රශ්නයක් විවෘත කළ යුතුය.
එපික් වොයේජ්

29
ඔබ එය ඇත්තටම නවත්වන බවට වග බලා ගන්න. විචල්ය විෂය පථය නිසා, ඔබට ඇමතීමට නිවැරදි හැඳුනුම්පත නොතිබිය හැකිය clearInterval. window.refreshIntervalIdදේශීය විචල්‍යයක් වෙනුවට මම භාවිතා කර ඇති අතර එය විශිෂ්ට ලෙස ක්‍රියා කරයි!
osa

2
මම setInterval හසුරුව එහි ආශ්‍රිත මූලද්‍රව්‍යයට ඇමිණීමට පටන් ගෙන ඇත (අදාළ විට): $('foo').data('interval', setInterval(fn, 100));ඉන්පසු එය ඉවත් කිරීමෙන් clearInterval($('foo').data('interval'));jQuery නොවන ක්‍රමයක් ද ඇති බව මට විශ්වාසයි.
මයිකල් - කොහෙද මැටි ෂිර්කි

105

ඔබ ප්‍රතිලාභ අගය setIntervalවිචල්‍යයකට සකසන්නේ නම්, clearIntervalඑය නැවැත්වීමට ඔබට භාවිතා කළ හැකිය .

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

මේ හා ජෝන් ගේ පිළිතුර අතර වෙනස මට නොපෙනේ
බොබ්ට්‍රොපෝ

ප්‍රමාද නමුත්, එය කිසියම් වචන වෙනසකින් පිටපත් කර ඇති බව මම සිතමි
අහමඩ් පවසයි

52

ඔබට නව විචල්‍යයක් සැකසිය හැකි අතර එය ක්‍රියාත්මක වන සෑම අවස්ථාවකම ++ කින් වැඩි කරන්න (එකක් ගණනය කරන්න), එය අවසන් කිරීමට මම කොන්දේසි සහිත ප්‍රකාශයක් භාවිතා කරමි:

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 () වෙඩි තැබීම දිගටම කරගෙන යයි. ClearInterval () (වෙනත් වගන්තිය ඇතුළත) පසු ඕනෑම දෙයක් ලොග් කිරීමට උත්සාහ කරන්න, එවිට එය සදහටම ලියා ඇති බව ඔබට පෙනෙනු ඇත.
රෆායෙල් ඔලිවෙයිරා

6
වැඩ නොකරන දෙයක් සඳහා බොහෝ ඉහළ නැංවීම්, සමහර විට මට SO හි පුද්ගලයින් තේරෙන්නේ නැත: P
Stranded Kid

3
$(document).ready(function(){ });jQuery, ඒ නිසා එය ක්‍රියා නොකරයි. මෙය අවම වශයෙන් සඳහන් කළ යුතුව තිබුණි.
paddotk

4
@OMGrant, ක්‍රියා නොකරන උදාහරණයකට අමතරව, ඔබට නම් කරන ලද විචල්‍යයක් ඇත varName, එය නම් නොකළ ශ්‍රිතයක් ගබඩා කරයි - wha ?? IMHO, ඔබ මෙම පිළිතුර වෙනස් කළ යුතුය.
ඩීන් රැඩ්ක්ලිෆ්

13

ඉහත පිළිතුරු වලින් දැනටමත් setInterval විසින් හසුරුව නැවත ලබා දෙන්නේ කෙසේද සහ අන්තරාල කාලරාමුව අවලංගු කිරීමට මෙම හසුරුව භාවිතා කරන්නේ කෙසේද යන්න පැහැදිලි කර ඇත.

සමහර වාස්තු විද්‍යාත්මක කරුණු:

කරුණාකර "විෂය පථය අඩු" විචල්‍යයන් භාවිතා නොකරන්න. ආරක්ෂිතම ක්‍රමය වන්නේ DOM වස්තුවක ගුණාංගය භාවිතා කිරීමයි. පහසුම ස්ථානය වනුයේ "ලේඛනය" ය. ආරම්භක / නැවතුම් බොත්තමකින් නැවුම්බව ආරම්භ කරන්නේ නම්, ඔබට බොත්තම භාවිතා කළ හැකිය:

<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?
icktoofay

1
නිවැරදි කිරීම. මම කිව්වේ document.body කියන්න. මගේ කේත උදාහරණයේ මම effectively ලදායී ලෙස බොත්තම භාවිතා කරමි. බොත්තම සඳහා හැඳුනුම්පතක් නොමැත, නමුත් "මෙම" දර්ශකය ශ්‍රිතයේ "d" පරාමිතියට බැඳී ඇත. විෂය පථය ලෙස "කවුළුව" භාවිතා කිරීම අවදානම් බැවින් කාර්යයන් ද එහි ඇත. උදාහරණයක් ලෙස, "ශ්‍රිත පරීක්ෂණය () {}" window.test හරහා ප්‍රවේශ විය හැකිය, එය කිසිසේත්ම විෂය පථයක් භාවිතා නොකිරීමට සමාන වේ, මන්ද එය කෙටිමං ය. මෙය උපකාරී වේ යැයි සිතමි.
ෂියන්

1
"විෂය පථය-අඩු" විචල්‍යයන් නැති නොකරන්න -> "විෂය පථය-අඩු" භාවිතා නොකරන්න මම එය සංස්කරණය කිරීමට ඉඩ තිබුණි, නමුත් වෙනස අකුරු 6 ට වඩා අඩු වන අතර දෝෂය අවුල් සහගතය.
ලීෆ් නෙලන්ඩ්

2
ඒ සඳහා ඔබට DOM අවශ්‍ය නොවේ. ගෝලීය විෂය පථය දූෂණය වීම වළක්වා ගැනීම සඳහා අපට IIFE එකක් කරන්න.
ඔනුර් යෙල්ඩ්‍රම්

1
එය නැවත ක්‍රියාත්මක කිරීම සඳහා මට අභ්‍යන්තර dml = 'ආරම්භය' පසු 'd.interval = undefined' එකතු කළ යුතුය. මොකද ඒ වගේ කාලයක් එක් වරක් වැඩ කරනවා.
jocmtb

11

දැනටමත් පිළිතුරු දී ඇත ... නමුත් ඔබට විවිධ කාල පරාසයන්හි විවිධ කාර්යයන් සඳහා සහාය වන විශේෂිත, නැවත භාවිතා කළ හැකි ටයිමරයක් අවශ්‍ය නම් , ඔබට මගේ TaskTimer (Node සහ browser සඳහා) භාවිතා කළ හැකිය .

// 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

ncnu,

Ur ර් කොන්සෝලය බ්‍රව්සරය (එෆ් 12) බැලීමට පෙර ධාවනය කිරීමේ කේතය උත්සාහ කළ විට ඔබට විවේකය නැවැත්විය හැකිය ... අදහස් දැක්වීමට උත්සාහ කරන්න පැහැදිලි ඉන්ටර්වෙල් (ප්‍රේරකය) නැවත කොන්සෝලයක් ලෙස පෙනේ, අලංකාරකාරකයක් නොවේද? : පී

උදාහරණයක් මූලාශ්‍රයක් පරීක්ෂා කරන්න:

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>


6

SetInterval () ක්‍රමය සමඟ ටයිමර් කට්ටලයක් ඉවත් කිරීමට clearInterval () ක්‍රමය භාවිතා කළ හැකිය.

setInterval සෑම විටම හැඳුනුම් අගයක් ලබා දෙයි. ටයිමරය නැවැත්වීම සඳහා මෙම අගය clearInterval () මගින් ලබා දිය හැකිය. ටයිමරය 30 සිට ආරම්භ වන අතර එය 0 බවට පත්වන විට නතර වේ.

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

3

SetInterval (...) වෙතින් ආපසු ලබා දුන් අගය පැවරීම සඳහා විචල්‍යය ප්‍රකාශ කරන්න සහ පවරා ඇති විචල්‍යය clearInterval () වෙත යොමු කරන්න;

උදා

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;
});

HTML:

<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

ටික වේලාවකට පසු පරතරය නැවැත්වීමට setTimeOut භාවිතා කරන්න.

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

0

පහත කේතය උපකාරී වනු ඇතැයි මම සිතමි:

var refreshIntervalId = setInterval(fname, 10000);

clearInterval(refreshIntervalId);

ඔබ කේතය 100% නිවැරදි කළා ... ඉතින් ... ගැටලුව කුමක්ද? නැත්නම් එය නිබන්ධනයක් ...


-2

සරල ප්‍රවේශයක් භාවිතා නොකරන්නේ ඇයි? පන්තියක් එක් කරන්න!

කිසිවක් නොකරන්නැයි අන්තරයට පවසන පන්තියක් එක් කරන්න. උදාහරණයක් ලෙස: හෝවර් මත.

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
මට ඇත්තෙන්ම සරල බවක් නොපෙනේ ... කිසිවක් නොකරන කාර්යයන් සඳහා ඇමතුම් ලබා ගැනීම වෙනුවට ඔබේ කාල පරතරයන් ඉවත් කිරීම වඩා පිරිසිදු යැයි මම සිතමි.
රොමේන් බ්‍රවුන්

මම එකඟ නැහැ. this.setInterval(function() { if(!$('#counter').hasClass('pauseInterval')) { //do something } }, 500);කේත සඳහා ඔබ සතුව ඇත්තේ එපමණයි. එපමණක් නොව, චෙක්පත යනු ඔබ කරන පළමු දෙයයි, එබැවින් එය සඟවා තබන විට එය ඉතා සැහැල්ලු ය. මෙය මෙයයි: තාවකාලිකව ශ්‍රිතයක් විරාමය . ඔබට එය දින නියමයක් නොමැතිව අවසන් කිරීමට අවශ්‍ය නම්: ඇත්ත වශයෙන්ම ඔබ පරතරය ඉවත් කරයි.
Aart den Braber

මෙය ඡන්ද විමසීමට සමාන වන අතර සාමාන්‍යයෙන් අධෛර්යමත් වේ. එය අඩු බලයක් සහිත රාජ්‍යයන්ගෙන් CPU අවදි කරනු ඇත. මෙම උදාහරණයේ ප්‍රතිපෝෂණය ක්ෂණික සිට 0 සිට 500 එම්එස් දක්වා ප්‍රමාද කරයි.
චාලි

අවුරුදු 2 කට පෙර මම කේතය ලිවූවත් මම ඔබ සමඟ සම්පූර්ණයෙන්ම එකඟ නොවෙමි. කවුන්ටරය කෙසේ හෝ එහි තිබිය යුතුය, මන්දයත් OP එය ඉල්ලා සිටි බැවිනි. බොත්තමක් එබීමෙන් පසු කවුන්ටරය නැවැත්වීමට ඔබ මෙය භාවිතා කරන්නේ නම්, මෙය උප ප්‍රශස්ත විසඳුමක් වනු ඇත, නමුත් සැරිසැරීමේදී විරාමයක් සඳහා, මෙය ලබා ගත හැකි සරලම විසඳුමකි.
Aart den Braber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.