В отличие от метода setTimeout, setInterval выполняет код много раз, через равные промежутки времени, пока не будет остановлен при помощи clearInterval.
В каком виде указывать первый параметр - разницы нет.
При указании строки кода - динамически создается функция с телом code.
Следующие два вызова почти одинаковы:
// (1)
setInterval('alert("прошла секунда")', 1000)
// (2)
function sec() {
alert("прошла секунда")
}
setInterval(sec, 1000) // использовать функцию
Но более правильным считается объявление функции в явном виде, например так:
setInterval(function() { alert(...) }, 1000)
Вызов со строкой существует для совместимости с прежними версиями javascript.
this
Функция выполняется в другом контексте, со значением this = window, поэтому о передаче правильного this надо позаботиться отдельно.
object = {
func: function() { alert(this) }
}
setInterval( object.func , 1000) // this будет равно window
// правильный вариант с передачей this
setInterval( function() { object.func.call(object) } , 1000)
Отмена выполнения
Вы можете отменить выполнение setInterval при помощи clearInterval, используя для этого идентификатор intervalID.
var intervalID = setInterval(...)
clearInterval(intervalID)
Автор: JSprog, дата: 16 августа, 2009 - 18:57
#permalinkСпасибо. Очень помогло.
Автор: Ramzess, дата: 19 сентября, 2009 - 22:42
#permalinkЯ как-то писал программу, которая отсчитывает 60 секунд в обратном порядке.
Так вот, когда значение опускается до 56, интервал отсчёта составляет уже две секунды, потом 4, потом я сам со счёта сбился... В чём проблема, нужно парсить время отсчёта, или датить?
Автор: Гость (не зарегистрирован), дата: 2 ноября, 2009 - 11:39
#permalinkНедавно встретил эту функцию. Сам, только начал изучать веб-дизайн.
Автор: антигерой (не зарегистрирован), дата: 6 декабря, 2009 - 06:37
#permalinkЗначение задержки ничуть не в милисекундах.
Счас вот гоняю цикл с НУЛЁВОЙ задержкой - а всёравно отрабатывается относительно медленно.
Немогу понять - в чём причина. Надо много быстрее чтобы работало.
Автор: Костя Шахмуров (не зарегистрирован), дата: 3 октября, 2010 - 16:33
#permalinkКак-то не нравится мне выражение "Но более правильным считается..." в справочнике. Если это справочник, то достаточно привести несколько примеров, и пользователь уже сам решит, что для него правильней. А если это учебник, то нужно аргументировать - почему это более правильно, чем другое. Мне что-то никак не понятно, почему более правильно задавать тело функции (которое может быть большим) прямо в вызове setInterval. Не лучше ли задать функцию где-то в сторонке, а в вызове setInterval указать только её имя?
Автор: jingvar (не зарегистрирован), дата: 22 октября, 2010 - 11:31
#permalinksetInterval('alert("прошла секунда")', 1000)
Хороший прикол. У меня в лисичке 70 страничек было открыто, вырубить только по F4 удалось.
Автор: Гость (не зарегистрирован), дата: 25 октября, 2010 - 16:40
#permalinkПочему-то эта функция работает как setTimout :-(
Контекст следующий:
есть функция:
function dlt(){
document.getElementById('count').value=ti10s;
ti10s--;
и 3 кнопки:
Так вот поле count обновляется всякий раз только по нажатию кнопки start, а не через каждые полсекунды , как замышлялось.
В чем может быть причина?
Автор: EuroFlock (не зарегистрирован), дата: 31 октября, 2010 - 09:44
#permalinkРано или поздно может понадобиться передавать параметры в ту функцию, которая вызывается через указанный период времени. Делается это очень просто, все параметры указываются после миллисекунд и не нужно писать громоздкую функцию:
var time=1; var name="first"; function timer(t,n) { alert(n+t); time++; } setInterval(timer, 1000, time, name); //setTimeout(timer, 1000, time, name);Автор: Technobulka (не зарегистрирован), дата: 20 февраля, 2011 - 23:17
#permalinkкак быть, если мне надо запихнуть функцию с переменной? например:
function move(direction) { ... }
setInterval(move(true), 1000);
Автор: pavelb (не зарегистрирован), дата: 8 июня, 2011 - 11:21
#permalinkВызов alert | confirm останавливает выполнение setInterval (поскольку модальное окно). Следующий код будет всегда ждать нажатия с клавиатуры:
<html> <body onload='f1()'> <script> function f1(){ setInterval('alert("!!!")',1000); } </script> </body> </html>Автор: Pavelob (не зарегистрирован), дата: 8 октября, 2011 - 01:50
#permalinkУ меня довольно скользкий вопрос:
делал слайдшоу
<img id="photo1" style="position: relative; z-index: 200; display: block;width:100%;"> <img id="photo2" style="position: relative; z-index: 100; display: none;width:100%;"> <script> var imgs = ["images/slide/f1.jpg", "images/slide/f2.jpg", "images/slide/f3.jpg", "images/slide/f4.jpg"]; var j=1; var cnt = imgs.length-1; jQuery('#photo1').attr('src',imgs[0]); jQuery('#photo2').attr('src',imgs[1]); setInterval("photos()",10000); function photos() { jQuery('#photo1').fadeOut(1000, function() { jQuery(this).attr('src',imgs[j]).fadeIn(1000); }); j++; if(j>cnt) { j=0; } jQuery('#photo2').attr('src',imgs[j]); }Все работает отлично только 1 минус при каждой смене фотографии идет скачет на эту фотографию при выполнении setInterval("photos()",10000);
если страничка длинная то когда прокручиваю вниз страницу при смене фотографии опять прокручивается на нее как это исправить ?
Автор: Гость (не зарегистрирован), дата: 20 октября, 2011 - 17:39
#permalinkЗдравствуйте, допустим есть следующий код:
setInterval(function(){ $('#slide').animate({ left:$(this).attr('left') }); }, 5000);При неактивной вкладке в firefox или chrome интервал времени продолжает считаться, но анимация останавливается в фоне, после перехода на вкладку элементы начинают "перебегать" без интервала пока не сменятся столько раз, сколько бы сменились в фоновом режиме вкладки...
Как бороться с этим? Как остановить счетчик времени в setInterval() или заставить анимацию исполняться в фоновой вкладке?
Автор: Tails, дата: 15 февраля, 2012 - 22:34
#permalinksetInterval(function() { alert(...) }, 1000)Анонимная функция - рекомендуемое решение ? очень сомнительный совет.
Автор: Гость (не зарегистрирован), дата: 26 февраля, 2012 - 10:40
#permalinkа можно место alert написать document.write
Автор: Sn0oSm0oMrIK (не зарегистрирован), дата: 6 марта, 2012 - 22:52
#permalinkА возможно ли как-нибудь в качестве задержки использовать переменную?
что-то вроде этого:
var delay = 1000 setInterval(function() { alert(...); delay += 100; }, delay);Автор: gyrdym, дата: 6 апреля, 2012 - 11:45
#permalinkВпринципе, можно и подобие многопоточности реализовать в яваскрипте))))
Автор: Гость (не зарегистрирован), дата: 13 августа, 2012 - 22:01
#permalinkтестил скорость перерисовки canvas
$(function(){ canvas = document.getElementById("canvas"); c = canvas.getContext("2d"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; window.onresize = function(e){ canvas.width = window.innerWidth; canvas.height = window.innerHeight; } function setPixel(imageData, x, y, r, g, b, a) { index = (x + y * imageData.width) * 4; imageData.data[index+0] = r; imageData.data[index+1] = g; imageData.data[index+2] = b; imageData.data[index+3] = a; } // read the width and height of the canvas width = canvas.width; height = canvas.height; // create a new pixel array setInterval(function(){ // draw random dots image = c.createImageData(width, height); for (i = 0; i < 1000; i++) { x = Math.random() * width | 0; // |0 to truncate to Int32 y = Math.random() * height | 0; r = Math.random() * 256 | 0; g = Math.random() * 256 | 0; b = Math.random() * 256 | 0; setPixel(image, x, y, r, g, b, 255); // 255 opaque } // copy the image data back onto the canvas c.putImageData(image, 0, 0); // at coords 0,0 }, 40) // 25 frames per second });работает превосходно, но где то раз в 3 секунды, изображение замирает на долю секунды, как будто пара - другая запусков не срабатывает
кто нибудь наблюдал нечто подобное? и если да, то как пофиксил?
Автор: WarGot (не зарегистрирован), дата: 11 октября, 2012 - 11:11
#permalinkПолезная статья. Спасибо, помогло с разработкой чата.
Автор: Гость (не зарегистрирован), дата: 27 декабря, 2012 - 03:40
#permalinkздравствуйте ребят помогите пожалуйста проблема такая хочу следить за сайтом ну к примеру возьмем "форум где надо авторизоваться при входе и тока потом будут видны комментарии" так вот как написать такой код который бы следил за этим форумом то есть при изменений сайта или форума мне выдавало звуковое оповещение или что то в этом роде и при этом когда я пуду включать слежку он сам авторизовался то есть чтоб я мог сохранить там логин и пароль один раз и кажди раз как буду включать чтоб ничего не надобыло уже... и без разницы на чем будет написан главное чтоб такое организовать тока я пока начиню в программировании и сам никак не справлюсь прощу помогите пожалуйста
Автор: Гость (не зарегистрирован), дата: 5 января, 2013 - 18:34
#permalinkсамый непонятный справочник
Автор: vitnet (не зарегистрирован), дата: 15 марта, 2013 - 14:08
#permalinkПодскажите пожалуйста как быть с таким примером, как полностью остановить new_1 и new_2 и вставить new_3?
var new_1 = "text 1"; var new_2 = "text 2"; var new_3 = document.title; function new_msg(){ if(document.title == new_2){ document.title = new_1; }else{ document.title = new_2; } } var timer = setInterval(new_msg,1000);Автор: Гость (не зарегистрирован), дата: 14 апреля, 2013 - 03:29
#permalinksetInterval("skClick(6,3);", 1000)
помогите прочитать что обозначает команда skClick(6,3) и именно цифры (6,3)
Автор: Гость (не зарегистрирован), дата: 9 июля, 2013 - 23:29
#permalinkТакой вопрос:
Написал скрипт, который плавно предает объекту прозрачность:
setTimeout(function() {document.getElementById('element').style.opacity = '1.0'}, 50) setTimeout(function() {document.getElementById('element').style.opacity = '0.9'}, 100) setTimeout(function() {document.getElementById('element').style.opacity = '0.8'}, 150) setTimeout(function() {document.getElementById('element').style.opacity = '0.7'}, 200) setTimeout(function() {document.getElementById('element').style.opacity = '0.6'}, 250) setTimeout(function() {document.getElementById('element').style.opacity = '0.5'}, 300)Можно ли сделать это с помощью setInterval, чтобы не городить адское количество программного кода, или есть какой - то другой способ это сделать?
Автор: Гость (не зарегистрирован), дата: 9 августа, 2013 - 11:14
#permalinkА чтоб заставить SetInterval при запуске обновить инфу в элементе (а далее через период).
Автор: dvomaks (не зарегистрирован), дата: 4 апреля, 2014 - 17:25
#permalinkПоломал мозг, почему не срабатывает setInterval. Может решение и лежит где-то на поверхности, но я в ступоре. Аж в голове булькает - так мозг кипит.
$(document).ready(function () { setInterval(Load, 2000); // создаём таймер который будет вызывать загрузку сообщений каждые 2 секунды (2000 милесукунд) }); var load_in_process = false; function Load() { // Проверяем можем ли мы загружать сообщения. Это сделанно для того, что бы мы не начали загрузку заново, если старая загрузка ещё не закончилась. if(!load_in_process) { load_in_process = true; // загрузка началась $.post("/auction.php", { act: "load", // указываем на то что это загрузка сообщений rand: (new Date()).getTime() }, function(data){ $('#bank').empty(); $('#bank').append(data[0]); $('#bet').empty(); $('#bet').append(data[1]); $('#betted').empty(); $('#betted').append(data[2]); $('#time').empty(); $('#time').append(data[3]); }, 'json' ); } }Автор: Гость (не зарегистрирован), дата: 7 апреля, 2014 - 10:00
#permalink$(document).ready надо вызывать поcле объявление Load
Автор: Жека11112 (не зарегистрирован), дата: 12 мая, 2014 - 08:45
#permalinkДобрый день!
Как сделать так что-бы у меня обновлялось количество новых сообщений, например как в контакте.
Или например есть сайт с анекдотами, и при добавлении в определенную категорию анекдота счетчик количества анекдотов добавлял в той сумме +1
Автор: SnegManul (не зарегистрирован), дата: 29 мая, 2014 - 06:34
#permalinkЯ в js не силен, если у кого есть время буду рад помощи
var array = [ [5402,13784], [73542,13785], ] var i = 0; function farming() { Accountmanager.farm.sendUnits(this,array[i][0],array[i][1]); if (i < 2) { i++; } if(i==2){ i=0; // необходимо что бы при совпадении этого условия делалась задержка на 10 минут например. И рекурсии дальше продолжалась. Пока работает нон стопом рекурсия делает круг и по новой. } } setInterval(farming, 500);Пытался нагуглить, но не смог найти.
Автор: Calvin (не зарегистрирован), дата: 4 июня, 2014 - 01:51
#permalinkВот за это
setInterval( function() { object.func.call(object) } , 1000)
только для того чтобы передать параметр javascript должен быть уничтожен
Автор: Jekel, дата: 27 июня, 2014 - 12:47
#permalinkЧего this._timerBeep() выполняется только один раз?
var Module = sys.Class.extend({ _init: function() { console.log('_init!'); setInterval(this._timerBeep(), 1000); }, _timerBeep: function(){ console.log('_timerBeep!'); this.update(); this.draw(); }, update: function() { console.log('update!'); }, draw: function(){ console.log('draw!'); } }); Module2 = Module.extend(); new Module2();Console log:
_init!
_timerBeep!
update!
draw!
Автор: manYhis, дата: 7 октября, 2014 - 12:50
#permalinkЯ хотел бы спросить влияет ли использования много интервалов setIntervals, на зависания компа , у меня через интервалы идут запросы к базе не всегда интервал всегда включен но запросы идет по определенным действия пользователя, или мой комп глючит или на самом деле и влияет, буду благодарен за разумный ответ
Автор: BRIGSS, дата: 11 марта, 2015 - 17:55
#permalinkкак не оборачивая в функцию писать код в setInterval("alert(1)
alert(6);
", 100)
Автор: Avissian, дата: 7 сентября, 2015 - 12:09
#permalinkПочему-то описание неверное. Вот так же:
var intervalId = setInterval(func / code, delay[, arg1, arg2...])
Нюанс использования аргументов не описан. Следующий код под Node.js показывает суть
var b = []; var test = function (txt) { console.log('Elapsed ' + txt); }; for (i = 0; i < 10; i++) b.push(setInterval(function (/*arg1*/a) { test(/*arg1*/a + ' ' + /*no arg*/i); }, 1000, /*arg1*/i)); i = 5;Вывод:
Elapsed 0 5
Elapsed 1 5
Elapsed 2 5
Elapsed 3 5
Elapsed 4 5
Elapsed 5 5
Elapsed 6 5
Elapsed 7 5
Elapsed 8 5
Elapsed 9 5
...
Автор: Гость (не зарегистрирован), дата: 23 марта, 2017 - 11:52
#permalinkДобрый день.
Есть слайдер подскажите как пушить смену баннера, выводя значения атрибута, с помощью setInterval
Я совсем мало что понимаю в js... Буду признателен за помощь
var timerId = setInterval(function() {
console.log( $('.flex-active-slide a').attr('name') );
}, 1000);
Автор: Гость (не зарегистрирован), дата: 15 ноября, 2017 - 09:19
#permalinkДобрый день, вопрос в следующем имеется три произвольных объекта,
допустим это будут три строки заключенные в теги
, как правильно сделать поочередное изменение цвета в каждой из строк, через некий промежуток времени. С изменением цвета отдельной строки вроде получается перебирая добавленные классы:
var color = ['color1', 'color2', 'color3'];
var i = -1;
function fun(){
i=(i + 1)%color.length;
document.querySelector('p').className = color[i];
}
setInterval(fun, 5000);
Но перебирать сразу и строки и цвета для них не выходи.
Можно сделать просто перебор цветов для каждой отдельно, но не знаю правильно ли это будет..