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

如何使每个section下的column与item的index各自重置为0?

问题:为每个Section下的独立元素重置动画延迟索引

初始Item索引问题

最初通过元素index设置动画延迟时,代码如下:

初始HTML

<div>
     <div class="section section-1">
          <div class="item item-1">
          </div>
          <div class="item item-2">
          </div>
     </div>
     <div class="section section-2">
          <div class="item item-1">
          </div>
          <div class="item item-2">
          </div>
          <div class="item item-3">
          </div>
          <div class="item item-4">
          </div>
     </div>
</div>

初始JS

const AnimatedElements = document.querySelectorAll(".section .item");

AnimatedElements.forEach((AnimatedElement, index) => {
    AnimatedElement.style.setProperty('--index-delay', ([index] * 250) + "ms");
});

这段代码的问题是:所有.item的索引被视为连续数组(如[0, 1, 2, 3, 4, 5]),而非每个section下独立的索引(section1为[0,1],section2为[0,1,2,3]),导致动画延迟随元素数量持续变长。


修复Item后遇到的Column索引问题

修复Item的索引问题后,将逻辑应用到section下的column时,出现了同样的索引连续问题:

更新后的HTML

<div>
     <div class="section section-1">
          <div class="column column-1">
               <div class="item item-1">
               </div>
          </div>
          <div class="column column-2">
               <div class="item item-2">
               </div>
          </div>
     </div>
     <div class="section section-2">
          <div class="column column-1">
               <div class="item item-1">
               </div>
               <div class="item item-2">
               </div>
               <div class="item item-3">
               </div>
          </div>
          <div class="column column-2">
               <div class="item item-4">
               </div>
          </div>
     </div>
</div>

当前JS代码

const Sections = document.querySelectorAll(".section");
const Columns = document.querySelectorAll(".section .column");

Columns.forEach(Column => {
    const AnimatedElements = Column.querySelectorAll(".item");
    AnimatedElements.forEach((AnimatedElement, index) => {
        AnimatedElement.style.setProperty('--index-delay', (index * 250) + "ms");
    });
});

Sections.forEach(Section => {
    const AnimatedColumns = Section.querySelectorAll(".column");
    AnimatedColumns.forEach((AnimatedColumn, index) => {
        AnimatedColumn.style.setProperty('--index-delay', (index * 250) + "ms");
    });
});

当前问题:所有.column的索引被视为连续数组(如[0,1,2,3]),而非每个section下独立的索引(section1为[0,1],section2为[0,1]),需要让每个Section下的Column索引独立从0开始。


解决方案

核心逻辑是先遍历每个Section,再在每个Section内部遍历Column,这样每个Section内部的Column索引会从0重新计数:

const Sections = document.querySelectorAll(".section");

// 处理Column的索引延迟,同时整合Item的处理逻辑
Sections.forEach(Section => {
    const AnimatedColumns = Section.querySelectorAll(".column");
    AnimatedColumns.forEach((AnimatedColumn, index) => {
        // 为当前Section下的Column设置独立索引的延迟
        AnimatedColumn.style.setProperty('--index-delay', (index * 250) + "ms");
        
        // 处理当前Column内部的Item,保持每个Column内的Item索引独立
        const AnimatedElements = AnimatedColumn.querySelectorAll(".item");
        AnimatedElements.forEach((AnimatedElement, itemIndex) => {
            AnimatedElement.style.setProperty('--index-delay', (itemIndex * 250) + "ms");
        });
    });
});

逻辑说明

  1. 先获取所有section元素并逐个遍历,确保每个Section的处理独立
  2. 在每个section内部获取该Section专属的column列表,此时遍历Column的index会从0开始,不会跨Section累加
  3. 将Item的处理逻辑整合到Section遍历流程中,减少重复的DOM查询操作,提升代码效率

这样就能实现每个Section下的Column索引独立重置,动画延迟不会跨Section持续变长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:00:59