jQuery等到第一个间隔

时间:2013-11-01 15:38:20

标签: javascript jquery setinterval

我有这个小jquery代码,我希望数组的内容平滑地淡出和延迟一段时间,最后再次重新启动第一个数组项。

它工作正常,但不幸的是在开始时该函数在开始显示第一个条目之前等待5000毫秒间隔。我想马上开始。有谁知道我能做到这一点?

这是我的代码:

$('.wissenswertes').append('<div class="content"></div>');
var wissenArray = [0, 1, 2, 3];
itemNr = wissenArray.length;

function loopWissen() {
    var i = 0;
    setInterval(function () {
        $('.wissenswertes .content').text(wissenArray[i]).fadeIn(1000).delay(3000).fadeOut(1000);
        i++;
        if (i == itemNr) {
            i = 0;
        }
    }, 5000);
}
$(loopWissen);

Fiddle

顺便说一句:如果您对通用代码改进有任何建议,欢迎您告诉我们!谢谢。

4 个答案:

答案 0 :(得分:3)

请勿使用setInterval。它很脆弱,因为你依赖于与其他定时代码保持一致的间隔。

我只是在fadeOut(1000)之后调用该函数。

$('.wissenswertes').append('<div class="content"></div>');

var wissenArray = [0, 1, 2, 3];

function loopWissen() {
    var i = 0;
    (function loop() {
        $('.wissenswertes .content').text(wissenArray[i])
                                    .fadeIn(1000)
                                    .delay(3000) //  v---next loop after fadeOut
                                    .fadeOut(1000, loop);
        i = ++i % wissenArray.length;
    }());
}

$(loopWissen);

我还缩短了您的i递增代码。你的方式非常好,但这只是更简洁一点。

同时删除了itemNr,因为获取.length非常便宜。

答案 1 :(得分:1)

您可以先定义函数,而不是使用匿名函数,然后立即调用它:

function loopWissen() {
    var i = 0;
    var fn = function() { 
        $('.wissenswertes .content').text(wissenArray[i]).fadeIn(1000).delay(3000).fadeOut(1000);
        i++;
        if(i == itemNr) {
            i = 0;
        }
    };
    fn(); // calls it immediately 
    setInterval(fn, 5000);
}

答案 2 :(得分:0)

这样的事情:

$('.wissenswertes').append('<div class="content"></div>');
var wissenArray = [0,1,2,3];
var itemNr = wissenArray.length;
var i = 0;

function loopWissen() { 
   $('.wissenswertes .content').text(wissenArray[i]).fadeIn(1000).delay(3000).fadeOut(1000);
   i++;
   if(i == itemNr) {
       i = 0;
   }
}
setInterval(loopWissen, 5000);
loopWissen();

答案 3 :(得分:0)

就个人而言,我会稍微清理一下:

function loopWissen() {
    var array = [0, 1, 2, 3];
    (function next(i, a, l) { 
        $('.wissenswertes .content')
             .text(a[i])
             .fadeIn(1000).delay(3000).fadeOut(1000, function () {
                next(++i % l, a, l);
        });
    })(0, array, array.length);
}