我成功地使用.each()逐个淡出一些块。正如预期的那样,它从第一个元素开始,然后按顺序移动到下一个元素。
有没有办法控制.each()的顺序?而不是1,2,3,4等,我想,例如,1,2,5,9,6,3,4,7,8。
$(window).load(function() {
$(".blocks").each(function(i) {
$(this).delay((i + 1) * 500).fadeIn(500);
});
});
答案 0 :(得分:4)
在直接回答您的问题时,.each()
按照项目在jQuery内部数组中的顺序迭代jQuery对象的项目。除了更改它迭代的数组中的顺序之外,无法控制.each()
使用的顺序。
由于您没有披露如何通过算法确定所需的订单,您的选择是:
.each()
之前对数组进行排序.each()
致电.each()
调用在您的代码片段的特定实例中,您可以通过创建查找表来重新排序.each()
或重新排序数组,从而以不同的方式解决它,该查找表将查找给定数组索引的所需延迟值。
$(window).load(function() {
var delayLookup = {1:1,2:2,5:3,9:4,6:5,3:6,4:7,7:8,8:9};
$(".blocks").each(function(i) {
var delayTime = delayLookup[i] || i;
$(this).delay(delayTime * 500).fadeIn(500);
});
});
答案 1 :(得分:1)
您没有说明订单的逻辑是什么。如果你的意思是随机的,你可以这样做:
$('.blocks')
.sort(function(item) { return Math.floor(Math.random() * 2) === 1; })
.each(function(i) {
$(this).delay((i + 1) * 500).fadeIn(500);
});
答案 2 :(得分:0)
首先必须按照自己想要的方式对数组进行排序,这里似乎是一个非常随机的排序,所以你必须手动创建一个数组并填充元素。然后你可以调用每个函数。