Таймер цикла в JavaScript


мне нужно выполнить кусок кода JavaScript, скажем, каждые 2000 миллисекунд.

setTimeout('moveItem()',2000)

выше будет выполнять функцию после 2000 миллисекунд, но не будет выполнять его снова.

Так что внутри моей функции moveItem у меня есть:

function moveItem() {
    jQuery(".stripTransmitter ul li a").trigger('click');
    setInterval('moverItem()',2000);
}

это не работает, потому что я хочу, чтобы выполнить триггер нажмите jQuery кусок кода каждый интервал 2000 миллисекунд, но прямо сейчас он вызывается все время, и сценарий должен быть прерван. Кроме того это, я чувствую, что это очень плохое качество кодирования... Как бы вы решить эту проблему?

6 64

6 ответов:

отметим, что setTimeout и setInterval очень разные функции:

  • setTimeout выполнит код после, после тайм-аута.
  • setInterval выполнит код навсегда, в интервалах предоставленного тайм-аута.

обе функции возвращают a ID таймера, который вы можете использовать, чтобы отменить тайм-аут. Все, что вам нужно сделать, это сохранить в переменной и использовать его в качестве аргумента clearTimeout(tid) или clearInterval(tid) соответственно.

так, в зависимости от того, что вы хотите сделать, у вас есть два допустимых варианта:

// set timeout
var tid = setTimeout(mycode, 2000);
function mycode() {
  // do some stuff...
  tid = setTimeout(mycode, 2000); // repeat myself
}
function abortTimer() { // to be called when you want to stop the timer
  clearTimeout(tid);
}

или

// set interval
var tid = setInterval(mycode, 2000);
function mycode() {
  // do some stuff...
  // no need to recall the function (it's an interval, it'll loop forever)
}
function abortTimer() { // to be called when you want to stop the timer
  clearInterval(tid);
}

оба являются очень распространенными способами достижения тех же.

setInterval(moveItem, 2000);

и the способ выполнения функции moveItem каждые 2 секунды. Основная проблема в вашем коде заключается в том, что вы вызываете setInterval внутри, а не снаружи, обратный вызов. Если я понимаю, что вы пытаетесь сделать, вы можете использовать это:

function moveItem() {
    jQuery('.stripTransmitter ul li a').trigger('click');
}

setInterval(moveItem, 2000);

N. B.:Не передавайте строки в setTimeout или setInterval - лучше всего передать анонимную функцию или идентификатор функции (как я сделал выше). Кроме того, будьте осторожны, чтобы не смешивать одинарные и двойные кавычки. Выбрать одно и держись этого.

Я считаю, что вы ищете setInterval ()

должно быть:

function moveItem() {
  jQuery(".stripTransmitter ul li a").trigger('click');
}
setInterval(moveItem,2000);

setInterval(f, t) вызывает функцию аргумента, f раз в t миллисекундах.

здесь функция автоматического цикла с html-кодом. Я надеюсь, что это может быть полезно для кого-то.

<!DOCTYPE html>
<html>
<head>
<style>
div {
position: relative;
background-color: #abc;
width: 40px;
height: 40px;
float: left;
margin: 5px;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p><button id="go">Run »</button></p>
<div class="block"></div>
<script>

function test() {
$(".block").animate({left: "+=50", opacity: 1}, 500 );
   setTimeout(mycode, 2000);
};
$( "#go" ).click(function(){
test();
});
</script>
</body>
</html>

Скрипка: демо

вы должны попробовать что-то вроде этого:

 function update(){
    i++;
    document.getElementById('tekst').innerHTML = i;
    setInterval(update(),1000);
    }

это означает, что вы должны создать функцию, в которой Вы делаете то, что вам нужно сделать, и убедитесь, что она будет вызывать себя с интервалом, который вам нравится. В вашем теле onload вызовите функцию в первый раз так:

<body onload="update()">