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

如何实现滚动时边框动画的延迟触发?

根因说明

CSS的animation-delay属性计时起点为页面加载完成时刻,并非元素进入可视区域的时刻,因此页面下方的元素还未滚动到视野中时,动画已经完成了延迟计时并执行完毕,并非属性失效。

可行解决方案

方案1:使用Divi原生滚动动画设置(适配性最高,无需额外代码)

Divi本身已内置滚动触发动画能力,直接修改模块配置即可:

  • 进入对应分隔线模块的「设计」标签页,定位到「动画」设置组
  • 移除之前直接绑定在.border类上的全局动画样式
  • 在Divi动画设置中选择你需要的动画效果,将触发条件设置为进入视口时触发
  • 直接在面板中调整动画延迟、持续时间等参数即可

方案2:自定义JS+CSS实现(适合需要高度自定义动画效果的场景)

先调整CSS规则,把动画触发逻辑和基础样式拆分:

/* 分隔线基础样式,默认不触发动画 */
.border {
  opacity: 0;
  transform: scaleX(0);
  transform-origin: left center;
}
/* 元素进入视口后添加的激活类,仅此时触发动画 */
.border.animation-active {
  animation: 你之前定义的边框动画名称 0.8s ease forwards;
}

再添加监听元素进入视口的JS代码,将代码添加到Divi主题选项「集成」板块的页脚代码区域即可:

document.addEventListener('DOMContentLoaded', () => {
  // 监听所有带.border类的分隔线
  const borderList = document.querySelectorAll('.border');
  // 创建交叉观察器
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(item => {
      // 元素进入视口时添加激活类
      if (item.isIntersecting) {
        item.target.classList.add('animation-active');
        // 触发一次后取消监听,避免重复执行
        observer.unobserve(item.target);
      }
    })
  }, {
    threshold: 0.15 // 元素15%进入视口时触发,可按需调整数值
  })
  // 给所有分隔线绑定观察器
  borderList.forEach(el => observer.observe(el))
})

如果需要给不同分隔线设置不同的延迟,可给分隔线添加自定义属性data-delay(单位为毫秒),再修改JS逻辑即可:

// 进入视口的逻辑修改为
if (item.isIntersecting) {
  const delay = item.target.dataset.delay || 0;
  setTimeout(() => {
    item.target.classList.add('animation-active');
  }, delay)
  observer.unobserve(item.target);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:03