我有这个小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。
顺便说一句:如果您对通用代码改进有任何建议,欢迎您告诉我们!谢谢。答案 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);
}