使用eq()来淡入/淡出列表项

时间:2013-07-25 22:15:50

标签: javascript jquery

我有一组列表项,我想使用eq()来淡化()和fadeOut()。如果我的代码看起来很糟糕,我也很难发帖,很抱歉!

<ul id="skater_mulitivew">
  <li class="first_gallery"></li>
  <li class="second_gallery"></li>
  <li class="third_gallery"></li>
  <li class="fourth_gallery"></li>
</ul>

和我的jQuery / JS:

<script>
    $('.right_trigger').click(function(event) { 
      var i=0;
      event.preventDefault();
       while (i<5) { 
         $('#skater_mulitivew li').eq(0).fadeOut('slow');
         $('#skater_mulitivew li').eq(1).fadeOut('slow');
         i++;
       };
     });
</script>

它运行一次,但是当我重新单击.right_trigger项时,它不再运行。我想在每次点击时循环浏览每个列表项。感谢您的任何意见!

4 个答案:

答案 0 :(得分:1)

当前代码问题


i具有全局范围,因此下次循环尝试迭代i = 5时,这会导致循环不迭代。将i的声明移到匿名函数中。

$('.right_trigger').click(function(event) { 
var i=0;
  event.preventDefault();
   while (i<5) { 
     $('#skater_mulitivew li').eq(0).fadeOut('slow');
     $('#skater_mulitivew li').eq(1).fadeOut('slow');
     i++;
   });
 });

当前代码的优化


另一方面,我不确定为什么要调用fadeOut()函数5x。您可以通过以下方式实现相同的效果:

$('.right_trigger').click(function(event) { 
     event.preventDefault();
     //If your trying to fadeout all li use the proceeding commented code
     //$('#skater_mulitivew li").fadeOut("slow");

     //If your actually trying to target by index use the proceeding code
     $('#skater_mulitivew li:eq(0),#skater_mulitivew li:eq(1) ').fadeOut('slow');
     i++;
 });

轮播实施


鉴于评论显示您想要制作类似旋转木马的功能。这是发生这种情况的html,css和javascript。

<强> HTML

<ul id="skater_mulitivew">
  <li class="first_gallery">Gallery 1</li>
  <li class="second_gallery">Gallery 2</li>
  <li class="third_gallery">Gallery 3</li>
  <li class="fourth_gallery">Gallery 4</li>
</ul>
<div class="right_trigger">Trigger</div>

<强> CSS

#skater_mulitivew li{
    display:none;
}

#skater_mulitivew li:first-child{
    display: block;
}

<强>的Javascript

   $('.right_trigger').click(function(event) { 
      var items = $("#skater_mulitivew li");
      toggle(items,0);
   });

function toggle(items, index){

        items.eq(index).fadeOut('slow', function(){
               index = (index == items.length -1) ? -1:index;
               items.eq(index + 1).fadeIn('slow', function(){

               toggle(items, ++index); 
            });   
        });
}

工作示例: http://jsfiddle.net/njxnN/1/

答案 1 :(得分:1)

肯定会有一次因为1 0已经淡出

<script>
    var i=0;

    $('.right_trigger').click(function(event) { 
      event.preventDefault();
       while (i<5) { 
         var next = i + 1;
         $('#skater_mulitivew li').eq(i).fadeOut('slow');
         $('#skater_mulitivew li').eq(next).fadeOut('slow');
         i = i + 2;
       }
     });
</script>

您还应在html <ul id="#skater_mulitivew"><ul id="skater_mulitivew">

中更正此问题

<强> FIDDLE

答案 2 :(得分:0)

是的,i是全局设置的,当你再次调用时,它超出了while条件的范围。

答案 3 :(得分:0)

我认为你的脚本没有做你认为应该用while循环做的事情,但你的主要问题实际上是语法错误。

<ul id="#skater_mulitivew">

应该是

<ul id="skater_mulitivew">

请注意无关的哈希。

       });
 });

应该是

       }
 });

注意无关的括号和分号。

修复这两个错误会导致前两个li项在点击时淡出。