我对JQuery很陌生,但这是一个非常简单的问题。
我试图通过JavaScript中的字符串数组淡入/淡出/增加/重复,但for循环总是正好4
$(document).ready(function() {
var words=["Fantastic","Exiting", "Professional", "Life Changing", "Exactly What You Are Looking For..."];
for(var j = 0; j < words.length; j++){
$('#word').html(words[j]).fadeOut().delay(1000).fadeIn().delay(1000);
}
});
我确定这只是一个愚蠢的错误,因为我的代码是盲目的,但是我现在可以自己为我调用它?
提前干杯。
答案 0 :(得分:1)
这里的问题是(可能)在 async 中执行了fadeOut
和fadeIn
,所以实际发生的事情是这样的:
j == 0
。#word
元素,并将其内容设置为word[0]
fadeOut
,delay
,fadeIn
和delay
。fadeOut
开始运行j == 1
#word
元素并将其内容设置为word[1]
,并再次对相同的四个动画进行排队。fadeOut
仍未完成。如果是,delay(1000)
肯定不是。word[4]
完成之前将内容设置为fadeOut
。word[4]
。您需要使用回调函数来推迟更新元素的内容,直到动画事件结束。
答案 1 :(得分:0)
如果我理解正确,你总会看到最后的字符串淡入/淡出。
这是因为循环不会延迟下一次迭代和淡入淡出效果。
您需要更改逻辑,以便在淡入淡出效果之后值不会增加,或者远离使用显式循环。
$(document).ready(function() {
var words=["Fantastic","Exiting", "Professional", "Life Changing", "Exactly What You Are Looking For..."];
//run against first string in array
$('#word').html(words[0]).fadeOut(complete).delay(1000).fadeIn().delay(1000);
//callback function
function complete() {
//check which word we're currently on
var index = words.indexOf($(this).html());
//if it's not the last word, run the code with the next
if (index < words.length) {
$(this).html(words[index+1]).fadeOut(complete).delay(1000).fadeIn().delay(1000);
}
}
});
答案 2 :(得分:0)
这可能会解决您的问题,试一试并告诉我们它是否有效。
$(document).ready(function() {
var words=["Fantastic","Exiting", "Professional", "Life Changing", "Exactly What You Are Looking For..."];
for(var j = 0; j < words.length; j++){
(function (index) {
$('#word').html(words[index]).fadeOut().delay(1000).fadeIn().delay(1000);
}(j));
}
});