使用while循环时出现循环元素的问题

问题描述:

我想通过div的集合进行循环,并在单击事件触发时随机淡出它们,但此时我必须不断点击才能将其他div全部淡出。我宁愿点击一个div,并让它的所有div随机淡出。我已经在while循环中添加了一些console.logs,并且一切似乎都正常,问题在于当我试图淡出实际元素时。如果任何人都可以提供帮助,那会很棒?使用while循环时出现循环元素的问题

小提琴这里:http://jsfiddle.net/kyllle/sdpzJ/7/

+2

请在这里发表一些相关的代码,并请不要签收您的帖子 – PeeHaa 2012-01-31 14:59:10

+0

嗨,链接捣鼓在去除:) – styler 2012-01-31 15:02:30

+1

伟大的职位和签名。现在,如果您可以在此发布相关代码,我们可能会帮助您解决您的问题。 – PeeHaa 2012-01-31 15:05:22

也决定把它扔出去。简化。

$(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(); 
    }); 
}); 

http://jsfiddle.net/sdpzJ/15/

你的随机数生成器是之外的环 - 所以你只能一遍又一遍地得到一个随机数。

试试这个:

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当你点击一个。

I updated your fiddle here

这里是一个更好和更有效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(); 
    } 
} 

这样,你只能通过数组去一次 我更新你拨弄它,以及看到它在行动:)