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

如何在AnimXYZ中实现元素交错进入、同步退出动画?

实现AnimXYZ元素交错进入、同步退出的动画

当前代码中,父元素的stagger-5属性会同时作用于xyz-in和xyz-out动画,导致退出时元素也会交错播放。要实现进入交错、退出同步,需要分离进入和退出的 stagger 配置,以下是两种可行方案:


方案1:动态控制父元素的stagger属性

进入动画保留父元素的stagger实现交错,退出时临时移除父元素的stagger属性,让所有元素同步执行退出动画,动画结束后再恢复stagger属性以保证下次进入仍能交错。

修改后的HTML(无需改动)

<div class="diagram" xyz="duration-6 ease-in stagger-5 narrow-75% fade-100% origin-left left-2">
    <div class="rectangle xyz-in">
      <div class="text">whatever the text is, this is a sample</div>
    </div>
    <div class="rectangle xyz-in">
      <div class="text">whatever the text is, this is a sample</div>
    </div>
</div>

修改后的JS

const diagram = document.querySelector(".diagram");
const rs = document.querySelectorAll(".rectangle");
const staggerConfig = "stagger-5"; // 保存原始交错配置

setInterval(() => {
  const isEntered = rs[0].classList.contains("xyz-in");
  
  if (isEntered) {
    // 退出阶段:移除父元素的交错配置
    const currentXyz = diagram.getAttribute("xyz").replace(staggerConfig, "").trim();
    diagram.setAttribute("xyz", currentXyz);
    // 切换退出类
    rs.forEach(r => {
      r.classList.remove("xyz-in");
      r.classList.add("xyz-out");
    });
    // 动画结束后恢复交错配置(duration-6对应600ms)
    setTimeout(() => {
      diagram.setAttribute("xyz", `${currentXyz} ${staggerConfig}`);
    }, 600);
  } else {
    // 进入阶段:直接切换类,父元素交错配置生效
    rs.forEach(r => {
      r.classList.remove("xyz-out");
      r.classList.add("xyz-in");
    });
  }
}, 5000);

方案2:给退出动画单独配置无交错

通过给每个子元素添加xyz-out="stagger-0"属性,直接覆盖父元素的交错配置,让退出动画同步执行。

修改后的HTML

<div class="diagram" xyz="duration-6 ease-in stagger-5 narrow-75% fade-100% origin-left left-2">
    <div class="rectangle xyz-in" xyz-out="stagger-0">
      <div class="text">whatever the text is, this is a sample</div>
    </div>
    <div class="rectangle xyz-in" xyz-out="stagger-0">
      <div class="text">whatever the text is, this is a sample</div>
    </div>
</div>

JS保持原有逻辑即可

const rs = document.querySelectorAll(".rectangle");

setInterval(() => {
  rs.forEach((r) => {
    r.classList.toggle("xyz-in");
    r.classList.toggle("xyz-out");
  });
}, 5000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:10:29