【发布时间】:2015-03-25 04:13:45
【问题描述】:
我正在尝试使用 Javascript/jquery 逐个点亮一排字母。我使用 span 元素创建了一个数组,并在每个字母上循环以首先将其颜色更改为红色,然后再次变回黑色。问题是 $.each 循环函数不会等待 setTimeout 完成......它会立即循环所有它们,使它们立即变为红色,而不是一个接一个。任何想法如何解决这一问题?这是我的代码:
JSFiddle:http://jsfiddle.net/john23/8chu18k9/
var array = $(".one");
var doIt = function () {
$.each(array, function(index, value){
array.eq(index).css('color','red');
setTimeout(function(){
array.eq(index).css('color','black');
}, 500);
});
};
doIt();
P {
color:black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>
<span class="one">H</span><span class="one">e</span><span class="one"></span><span class="one">l</span><span class="one">l</span><span class="one"></span><span class="one">o</span><span class="one"> M</span><span class="one"></span><span class="one">y </span><span class="one">N</span><span class="one"></span><span class="one">a</span>
</p>
【问题讨论】:
-
你应该在这样做的时候正确设置超时..尝试像这样设置它 setTimeout(....., 500 * (index +1)); .......... 现有逻辑中的问题是它在循环中同时为所有字符设置超时,因此即使在技术上为每个字符单独设置超时,但由于无法识别效果快速执行。
标签: javascript jquery loops settimeout