使用while循环时出现循环元素的问题
问题描述:
我想通过div的集合进行循环,并在单击事件触发时随机淡出它们,但此时我必须不断点击才能将其他div全部淡出。我宁愿点击一个div,并让它的所有div随机淡出。我已经在while循环中添加了一些console.logs,并且一切似乎都正常,问题在于当我试图淡出实际元素时。如果任何人都可以提供帮助,那会很棒?使用while循环时出现循环元素的问题
答
也决定把它扔出去。简化。
$(function() {
var $ctn = $('#container .ctn');
function randomFadeOut() {
var $r = $ctn.not($(this));
var e = 0;
while (e < $ctn.length) {
$r.eq(e).delay(Math.random() * 500).animate({ opacity: 0 });
e++;
}
}
$ctn.hide().click(randomFadeOut).each(function(v) {
$(this).delay(50 * v).fadeIn();
});
});
答
你的随机数生成器是之外的环 - 所以你只能一遍又一遍地得到一个随机数。
试试这个:
function randomFadeOut(i){
var random
for (var e=0;e<ctnLength;e++) {
random = Math.floor(Math.random() * ctnLength);
$(ctn[random]).not(i).animate({ opacity : 0 });
}
}
当然,由于这是随机的,同样的细胞可以多次选择,这会留下许多小区的身后。
答
我不知道如果我理解你的问题,但这里有一个可能的解决方案:
function randomFadeOut(i){
var random;
var e = 0;
while (e < ctnLength) {
random = Math.random() * 1000;
$(ctn[e]).not(i).delay(random).animate({ opacity : 0 });
e++;
}
}
这将在随机时间淡出了所有的div当你点击一个。
答
这里是一个更好和更有效randomFade功能:
function randomFadeOut(i){
var tmp = ctn.toArray();
tmp.sort(function(){ return Math.floor(Math.random()*3) -1; });
for(var i=0; i<tmp.length; ++i){
$(tmp[i]).delay(100 * i).fadeOut();
}
}
这样,你只能通过数组去一次 我更新你拨弄它,以及看到它在行动:)
请在这里发表一些相关的代码,并请不要签收您的帖子 – PeeHaa 2012-01-31 14:59:10
嗨,链接捣鼓在去除:) – styler 2012-01-31 15:02:30
伟大的职位和签名。现在,如果您可以在此发布相关代码,我们可能会帮助您解决您的问题。 – PeeHaa 2012-01-31 15:05:22