我有一个数组,其中包含我页面中的一些元素。
现在我需要一个通过数组识别的函数,并为每个元素添加一个类bold
。问题是,一旦添加了类,就必须经过一段时间。然后必须删除bold
,并且需要将其应用于下一个元素,从而产生" wave"运动。
我试图这样做:
$.each(tdArr, function(i, v) {
v.addClass("bold");
setTimeout(function(){
v.removeClass("bold");
}, 900)
})
该代码的问题是bold
一次添加到所有元素,并在900 ms后被删除,同样来自所有元素时间。
如何在单独的操作之间添加延迟,我该怎么做?
答案 0 :(得分:1)
我认为你需要稍微改变一下,因为setTimout
会立即返回,它不会阻止下一个元素被设置为粗体。
您可以使用以下方法执行此操作:
function bold(i){
if(i>0){
$tdArr.eq(i-1).removeClass('bold');
}
if(i == $tdArr.length){
return;
}
$tdArr.eq(i).addClass('bold')
setTimeout(function() { bold(i+1) },900);
}
然后打电话给你,你只需要拨打bold(0)
:
答案 1 :(得分:0)
试试这个:
$.each(tdArr, function(index, element) {
var $elem = $(element);
$elem.addClass("bold");
setTimeout(function(){
$elem.removeClass("bold");
}, 900)
})
第二个参数不是jQuery元素,你需要转换他
答案 2 :(得分:0)
在迭代数组时增加延迟,并确保将元素包装在jQuery中(如果它尚未包装)。如果它是jQuery元素的集合,那么使用each
进行迭代。
var delay = 900
$els.each(function(){
var $this = $(this)
setTimeout(function(){
$els.removeClass('bold')
$this.addClass('bold')
}, delay+=900)
})
否则,我会使用for
并将该元素包装在jQuery中。
for (var i=0, l=arr.length, d, prev; i<l; i++; d+=900) {
prev = arr[i-1]
setTimeout(function(){
if (prev) $(prev).removeClass('bold')
$(arr[i]).addClass('bold')
}, d)
}
答案 3 :(得分:0)
这样的事情对你有用吗?
function Bold(element) {
$(element).addClass("bold"); // we bold the current tdArr
setTimeout(function(){
var nextSibling = $(element).next("td") // (if the tdArr are "td" tags) we find the next td brother of this one
if (!!nextSibling) Bold(nextSibling); // if there is a brother, repeat the function on him after 900ms
}, 900)
}
Bold(myfirsttd);