setTimeout в $ .each ()

Я могу рекомендовать Ninject. Это невероятно быстро и просто в использовании, но только если Вам не нужна конфигурация XML, еще необходимо использовать Виндзор.

14
задан GreenDude 13 August 2009 в 09:00
поделиться

3 ответа

Вы просматриваете элементы и добавляете таймер для каждого с той же конфигурацией. По сути, для каждого элемента мгновенно устанавливается новый таймер. При первом тике всех таймеров элементы обновляются. Интервал одинаков для каждого, поэтому кажется, что все они обновляются одновременно.

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

var elements = $(this).find('article.loading');
var index = 0;

setTimeout(function () {
    $(elements).get(index).replaceWith($('#dumpster article:first'));
    index++;
}, speed);

Что-то вроде выше, но не забудьте также остановить таймер!

17
ответ дан 1 December 2019 в 06:16
поделиться

Именно так написал Энди МакКлаггэдж. Я думаю, что-то подобное могло бы вам помочь.

var speed = 1000;

// init timer and stores it's identifier so it can be unset later
var timer = setInterval(replaceArticle, speed);

var articles =  $('article.loading');
var length = articles.length;

var index = 0;
function replaceArticle() {
     articles.eq(index).replaceWith($('#dumpster article:first'));

     index++;

     // remove timer after interating through all articles
     if (index >= length) {
         clearInterval(timer);
     }
}
16
ответ дан 1 December 2019 в 06:16
поделиться

Try with window.setTimeout.

-1
ответ дан 1 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: