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

如何在WordPress中使用AMP Script实现滚动时为body添加类

在AMP中实现滚动时为body添加类的方法

AMP 页面限制了普通自定义 JavaScript 的执行,必须通过官方提供的 amp-script 组件来处理这类交互逻辑。以下是实现滚动时为 body 添加类的具体步骤:

1. 引入 amp-script 组件

首先在页面的 <head> 中添加 amp-script 组件的引用,这是 AMP 执行自定义脚本的必要前提:

<script async custom-element="amp-script" src="https://cdn.ampproject.org/v0/amp-script-0.1.js"></script>

2. 编写滚动监听脚本

在 <body> 中添加 amp-script 标签,内联处理滚动事件的逻辑。脚本会监听页面滚动,当滚动距离超过设定阈值时,为 body 添加指定类名,反之移除:

<amp-script layout="container" script="scroll-handler" data-hash="YOUR_SCRIPT_HASH">
  <script type="text/javascript" id="scroll-handler">
    // 自定义滚动触发阈值(单位:px)
    const SCROLL_TRIGGER = 50;
    const bodyEl = document.body;

    // 处理滚动逻辑的核心函数
    function updateBodyClass() {
      const scrollDistance = window.scrollY || document.documentElement.scrollTop;
      if (scrollDistance > SCROLL_TRIGGER) {
        bodyEl.classList.add('scrolled');
      } else {
        bodyEl.classList.remove('scrolled');
      }
    }

    // 节流函数优化性能,避免滚动事件频繁触发
    function throttle(func, delay = 150) {
      let lastExecution = 0;
      return function(...args) {
        const now = Date.now();
        if (now - lastExecution >= delay) {
          lastExecution = now;
          func.apply(this, args);
        }
      };
    }

    // 绑定滚动事件(使用节流优化)
    window.addEventListener('scroll', throttle(updateBodyClass));
    // 页面加载时执行一次,确保初始状态正确
    updateBodyClass();
  </script>
</amp-script>

关键注意事项

  • 脚本哈希验证:AMP 要求内联脚本必须通过哈希验证以保证安全性。你需要计算上述内联脚本的 SHA-256 哈希值,替换代码中的 YOUR_SCRIPT_HASH。可以使用 AMP 官方提供的哈希生成工具或者本地计算工具完成。
  • AMP 页面基础结构:确保你的页面是标准 AMP 页面,已包含 <html amp> 声明和 AMP 核心脚本引用。
  • 性能优化:滚动事件触发频率很高,使用节流函数可以减少函数执行次数,避免页面卡顿。

为什么普通 JS/jQuery 不生效?

AMP 为了保证页面性能和安全性,禁止直接运行自定义的普通 JavaScript 或 jQuery 代码。所有交互逻辑必须通过 AMP 官方允许的组件(如 amp-script)来执行,否则代码会被 AMP 运行时拦截,无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:17