我有一个小组用Jquery迭代一个数组。我有一个数组,我希望数组中的每个项目都淡入淡出(并在淡出时切换到下一个项目)。我可以让它循环适当的次数,但for循环总是显示最后一个变量,而不是每个变量。
var x = [1,2,3,4,5];
$("#test").text("test");
var y = 0;
for(var i = 0; i<x.length;i++){
$("#test").delay(1000).animate({opacity:'0'},function(){
$(this).text(i)
}).delay(1000).animate({opacity:'1'});
}
所以,p标签这指的是&#34; text&#34;然后闪现&#39; 5&#39;五次而不是计数。我认为延迟会起作用,但for循环结束并且不等待jquery完成。
答案 0 :(得分:1)
创建一个闭包
for (var i = 0; i < x.length; i++) {
$("#test").delay(1000).animate({ opacity: '0' }, (function(i) {
return function() { $(this).text(i); }
})(i)).delay(1000).animate({ opacity: '1' });
}
您正在创建一个自执行函数,该函数在其上下文中存储了i
,然后返回一个函数,该函数由于创建了闭包而也可以访问i
变量。
答案 1 :(得分:1)
我猜你也可以用$ .each实现这个:
var x = [1,2,3,4,5];
$("#test").text("test");
$.each(x, function(i) {
$("#test").delay(1000).animate({opacity:'0'},function(){
$(this).text(x[i])
}).delay(1000).animate({opacity:'1'});
});