You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

堆叠卡片轮播:使用jQuery实现z-index循环切换

堆叠卡片轮播的z-index循环切换实现方案

核心思路

不用硬编码每个z-index的切换规则,而是通过收集当前层级→排序→重新分配的方式实现循环,这样不管卡片数量增减都能适配。核心逻辑是:将最上层(z-index最高)的卡片移到最底层,其余卡片层级依次提升一级。

完整实现代码

HTML(优化后,移除内联样式,用CSS统一管理)

<div class="container">
  <div class="card active" data-z="4">1</div>
  <div class="card" data-z="3">2</div>
  <div class="card" data-z="2">3</div>
  <div class="card" data-z="1">4</div>
</div>
<button class="toggle-btn">切换卡片</button>

CSS(添加基础样式和切换动画)

.container {
  position: relative;
  width: 200px;
  height: 300px;
  margin: 20px auto;
}

.card {
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 3rem;
  color: white;
  transition: all 0.5s ease;
  /* 初始偏移,模拟堆叠效果 */
  transform: translateY(0);
}

.card.active {
  background: orange;
}
.card:nth-child(2) { background: tan; }
.card:nth-child(3) { background: pink; }
.card:nth-child(4) { background: blue; }

/* 切换动画:最上层卡片向下移出,其他卡片上移 */
.card.move-down {
  transform: translateY(100%);
  opacity: 0;
}
.card.move-up {
  transform: translateY(0);
  opacity: 1;
}

jQuery 代码(实现z-index循环切换)

$('.toggle-btn').click(function() {
  // 1. 获取所有卡片,按data-z降序排序
  let cards = $('.card').sort((a, b) => {
    return parseInt($(b).data('z')) - parseInt($(a).data('z'));
  });

  // 2. 保存所有当前层级值
  let zIndexes = cards.map(function() {
    return parseInt($(this).data('z'));
  }).get();

  // 3. 重新分配层级:最上层设为最低,其余依次+1
  cards.each(function(index) {
    if (index === 0) {
      // 原最高层级的卡片,设为最低值
      $(this).data('z', 1).css('z-index', 1);
      // 添加向下动画类
      $(this).addClass('move-down').removeClass('active');
    } else {
      // 其余卡片层级提升一级
      let newZ = zIndexes[index - 1];
      $(this).data('z', newZ).css('z-index', newZ);
      // 添加向上动画类
      $(this).addClass('move-up');
      // 第二个卡片变为新的active
      if (index === 1) {
        $(this).addClass('active');
      }
    }
  });

  // 动画结束后移除动画类,重置状态
  setTimeout(() => {
    $('.card').removeClass('move-down move-up');
  }, 500);
});

逻辑解释

  1. 排序卡片:通过data-z属性(也可以直接读取css('z-index'))将卡片按层级从高到低排序,确保能准确拿到最上层的卡片。
  2. 收集层级值:把当前所有卡片的层级存到数组里,方便后续重新分配。
  3. 重新分配层级:
    • 第一个(原最高层)卡片的层级设为1(最底层)
    • 后面的每个卡片,层级设为前一个卡片的原层级,实现“上移一级”
  4. 动画增强:通过添加CSS过渡类,让切换过程更流畅,提升用户体验。

简化版(直接操作z-index,不用data属性)

如果不想用data-z,可以直接读取元素的z-index值:

$('.toggle-btn').click(function() {
  let cards = $('.card').sort((a, b) => {
    return parseInt($(b).css('z-index')) - parseInt($(a).css('z-index'));
  });

  // 先把非最高层的卡片层级+1
  cards.slice(1).each(function() {
    let currentZ = parseInt($(this).css('z-index'));
    $(this).css('z-index', currentZ + 1);
  });

  // 再把最高层的卡片设为最低层级
  cards.first().css('z-index', 1);

  // 切换active类
  cards.first().removeClass('active');
  cards.eq(1).addClass('active');
});

内容的提问来源于stack exchange,提问作者valerio0999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:24:10