OK,所以我有这样的代码:

$(this).find('article.loading').each( function(i) {

    var el = this;
        setTimeout(function () {
        $(el).replaceWith($('#dumpster article:first'));
    }, speed);

});

欲替换为其他各元件,但我希望每个之间的延迟代替。

我不明白为什么这是行不通的,它只是一个替代超时后所有的人。

任何想法?

感谢。

有帮助吗?

解决方案

您通过元件循环和添加一个计时器到每个具有相同的配置。本质上,新的计时器立即被设置为每一个元素。在所有定时器的第一跳的元素被更新。的时间间隔是对于每个相同的,所以它们都出现在同一时间进行更新。

您逻辑需要围绕定时器为中心。定时器的每一个滴答需要更新集合中的下一个元素。你并不需要一个每个回路,使用定时器用递增的指数作为循环机制相结合,停止计时器,一旦你已经更新了最后一个元素。

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

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

喜欢的东西上面,但要记住也停止定时器!

其他提示

我只是修改代码并稍作改动。 只是一个小把戏。

$(this).find('article.loading').each( function(k, v) {
    var el = this;
        setTimeout(function () {
        $(el).replaceWith($('#dumpster article:first'));
    }, k*speed);
});

这是安迪·麦克格奇究竟是如何写的。我觉得这样的事情可以帮助你。

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

尝试用window.setTimeout

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top