在不同列表中一次淡入一个列表项

Posted

技术标签:

【中文标题】在不同列表中一次淡入一个列表项【英文标题】:Fade in list items one at a time in different lists 【发布时间】:2014-05-27 03:57:55 【问题描述】:

我一直在尝试制作一组​​很酷的列表,一次显示一个项目。但是,如果我使用下一种方法这样做,它就会变得缓慢而滞后。有没有办法顺利做到这一点?

这是 CodePen 的东西和下面的代码:

html (emmet)

(.outer>(ul#list$>(li.left>h3title$)+(li.center>psome text)+(li.right>psome other text))*5)+button#showSHOAW

SCSS

$height: 50px;

*box-sizing:border-box
bodyfont-family:sans-serif

.outer
  width:100%;


  ul
    width:100%;
    list-style:none;
    padding:0;
    margin:0;
    height:$height;

    li
      float:left;
      width: (100%/3);
      background-color: whitesmoke;
      height:$height;
      border-left:solid thin #e1e1e1;
      text-align:center;
      &.center, &.right 
        display:none;
      
      &:first-child
        border-left:none;
      
    
  

jQuery

$(document).ready(function() 
    $('#show').click(function() 

      $('.center, .right').first().show('fast', function showNext () 
        $('.outer ul *').next('.center, .right').show('fast', showNext);
      );

    );

);

【问题讨论】:

这听起来很奇怪但很准确 - codepen.io/anon/pen/BAkah - 它在某个地方出现了错误 - 但我现在没有时间修复它 - 也许你会有更好的运气! :D 将其视为提示! :) 你试过 $($(SELECTOR).nextAll(SELECTOR)[0]) 或 $(SELECTOR).nextAll().first() 谢谢,伙计们!我和一个朋友一起解决了这个问题,但我彻底测试了你的想法。不过,可能超出了我的想象。 【参考方案1】:

我已经找到了解决方案!原来.next 方法不适合整个事情,因为在第一个列表的末尾,它不能用于下一个。我尝试使用.parent 移出并回到for 内,但它同时打开每个项目。 SetTimeout 也不是骰子,因为 javascript 不会等待上一次迭代完成(它会为所有事情设置时间并立即完成所有事情)。

所以解决方法如下(also in CodePen):

var c=-1; //il counter - c=1, show center; c=-1, show right
var p=1;  //ul counter - c=-1, p++
  $('#show').click( function() 
      $('#list' + p +' li').first().show('fast',   // first of all (list1.ul.center)
          function showNext()
            c*=-1;        // switch li (right)
            if (c==1) 
              $('#list' + p + ' li').next('ul .center').show('fast', showNext);
             else       // c= -1, show .right
              p++;        //next list
              $('#list' + (p-1) + ' li').next('ul .right').show('fast', showNext);
            
          
      );
     
  );

$('#hide').click( function() 
  $('ul .center, ul .right').hide('fast');
  c=-1; p=1;
);

这个想法是使用next 仅在当前列表内移动。然后,如果下一个用当前完成,则使用变量移动到下一个。

比我预期的要复杂一点(waaaay),但它渲染得非常流畅。

【讨论】:

以上是关于在不同列表中一次淡入一个列表项的主要内容,如果未能解决你的问题,请参考以下文章

在列表项悬停时更改图像时添加淡入/淡出效果的问题

停止在movieclip actionscript 2上淡入淡出

淡入/淡出的简单切换不适用于过渡、不透明度和可见性

jQuery使用参数淡入淡出功能

Chrome DOM 未针对 jQuery 追加/淡入更新

jQuery不透明度/淡入淡出动画只能使用一次