【问题标题】:Cascading z-index with jQuery使用 jQuery 级联 z-index
【发布时间】:2012-12-31 02:40:30
【问题描述】:

所以我有一个这样的列表;

<ul>
  <li>Sausage</li>
  <li>Egg</li>
  <li>Parsnip</li>
  <li>Sarsaparilla</li>
  <li>Burger</li>
  <li>Cilantro</li>
</ul>

我需要将“级联z-index”动态添加到特定的li,这样我就可以指定li 排在最前面,而所有其他lis 会逐渐减少。

例如,如果我有一个 jQuery click() 事件绑定到一个函数,该函数将按照我想要的方式动态计算 z-indexes,然后我单击“Parsnip”,列表现在看起来像这样;

<ul>
  <li style="z-index: 2;">Sausage</li>
  <li style="z-index: 3;">Egg</li>
  <li style="z-index: 4;">Parsnip</li>
  <li style="z-index: 3;">Sarsaparilla</li>
  <li style="z-index: 2;">Burger</li>
  <li style="z-index: 1;">Cilantro</li>
</ul>

点击“Cilantro”会使列表看起来像这样;

<ul>
  <li style="z-index: 1;">Sausage</li>
  <li style="z-index: 2;">Egg</li>
  <li style="z-index: 3;">Parsnip</li>
  <li style="z-index: 4;">Sarsaparilla</li>
  <li style="z-index: 5;">Burger</li>
  <li style="z-index: 6;">Cilantro</li>
</ul>

换句话说,被点击的li 将有最高的z-index 需要带到前面(需要计算,因为lis 的数量可以是任何值),它的直接兄弟姐妹将有一个更低,他们的兄弟姐妹更低,等等。

我怎么可能做到这一点?列表项不一定需要分配与图示完全相同的z-index 数字,只要实现“级联”元素的视觉效果,点击次数最多即可。

【问题讨论】:

    标签: javascript jquery z-index


    【解决方案1】:

    怎么样

    $('li').click(function(){
        var prev = $(this).prevAll();
        var next = $(this).nextAll();
        var count = prev.length;
        if (next.length > count){
            count = next.length;
        }
        $(this).css({zIndex: count+1});
        prev.each(setIndex);
        next.each(setIndex);
        function setIndex(i){
            $(this).css({zIndex: count-i})
        }
    });​
    

    http://jsfiddle.net/UaaNn/

    【讨论】:

    • 比我的解决方案更优雅。我不确定prevAll() 按顺序返回元素到最近的兄弟(但它确实:“元素按从最近的兄弟开始的顺序返回。”)。拿这个,OP。
    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多