📝 列表交错动画

使用递增的 transition-delay 创建列表项依次出现的优雅效果

交互演示

  • 🎯

    第一步:规划项目

    明确项目目标和需求,制定详细的开发计划

    1
  • 🎨

    第二步:设计界面

    创建用户友好的界面设计和交互原型

    2
  • 💻

    第三步:编写代码

    使用最佳实践实现功能,确保代码质量

    3
  • 🧪

    第四步:测试验证

    进行全面测试,修复发现的问题和缺陷

    4
  • 🚀

    第五步:部署上线

    将项目部署到生产环境,开始正式运营

    5
  • 📊

    第六步:监控优化

    持续监控性能指标,不断优化用户体验

    6

💡 提示:点击"播放动画"查看列表项依次出现的效果

实现步骤

步骤 1:HTML 结构

创建列表结构,每个列表项包含图标、内容和序号:

<ul class="staggered-list">
  <li class="list-item">
    <div class="list-item-icon">🎯</div>
    <div class="list-item-content">
      <h3 class="list-item-title">标题</h3>
      <p class="list-item-desc">描述</p>
    </div>
    <div class="list-item-number">1</div>
  </li>
  <!-- 更多列表项... -->
</ul>

步骤 2:设置初始状态

列表项初始状态为隐藏(透明且向下偏移):

.list-item {
  /* 初始状态:隐藏 */
  opacity: 0;
  transform: translateY(20px);

  /* 过渡效果 */
  transition:
    opacity 0.6s ease-out,
    transform 0.6s ease-out;
}

步骤 3:定义显示状态

添加 .show 类使列表项显示:

.list-item.show {
  opacity: 1;
  transform: translateY(0);
}

步骤 4:使用 JavaScript 添加递增延迟

通过 JavaScript 为每个列表项设置递增的 transition-delay:

// 获取所有列表项
const items = document.querySelectorAll('.list-item');

// 播放动画
function playAnimation() {
  items.forEach((item, index) => {
    // 为每个项设置递增的延迟(100ms 间隔)
    const delay = index * 100;
    item.style.transitionDelay = `${delay}ms`;

    // 添加 show 类触发动画
    setTimeout(() => {
      item.classList.add('show');
    }, 50);
  });
}

// 重置动画
function resetAnimation() {
  items.forEach(item => {
    item.classList.remove('show');
    item.style.transitionDelay = '0ms';
  });
}

步骤 5:延迟值示例

每个列表项的延迟值递增,创建交错效果:

第 1 项
0ms
第 2 项
100ms
第 3 项
200ms
第 4 项
300ms
第 5 项
400ms
第 6 项
500ms

关键要点

  • transition-delay:通过递增的延迟值创建交错效果,每个元素依次出现
  • 组合变换:同时使用 translateY 和 opacity 创建平滑的淡入上升效果
  • 延迟间隔:通常使用 50-150ms 的间隔,太短会显得仓促,太长会显得拖沓
  • timing-function:使用 ease-out 让动画开始快、结束慢,更自然
  • 初始状态:确保元素初始状态为隐藏(opacity: 0),避免闪烁
  • 性能优化:使用 transform 和 opacity 属性,它们由 GPU 加速
  • 可访问性:考虑使用 prefers-reduced-motion 为需要的用户禁用动画
  • 应用场景:适用于列表加载、菜单展开、卡片网格等场景