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

jQuery返回顶部按钮转Vanilla JS时出现addEventListener空值报错如何解决

Uncaught TypeError: Cannot read property 'addEventListener' of null

报错原因

  • 选择器使用错误:你调用document.getElementById("backToTopBtn")获取元素,但对应HTML的返回顶部按钮仅设置了class="scroltop",没有id="backToTopBtn"属性,因此该方法返回null,对null调用addEventListener方法就会抛出上述错误。
  • 执行时机异常:若JS代码在DOM元素渲染完成前执行,即便选择器正确也无法获取到元素对象,同样会返回null触发报错。
  • 逻辑缺失:当前你编写的Vanilla JS仅实现了点击返回顶部的逻辑,缺少原有jQuery代码中滚动距离判断、按钮显隐的功能。

解决方法

1. 修正选择器并补全完整功能

优先监听DOMContentLoaded事件保证DOM加载完成后再执行代码,使用类选择器获取按钮元素,同时补全所有原有功能,代码示例如下:

document.addEventListener('DOMContentLoaded', function() {
  // 通过类名获取按钮元素
  const backToTopBtn = document.querySelector('.scroltop');
  // 增加非空判断,避免极端场景报错
  if (!backToTopBtn) return;

  // 点击返回顶部逻辑
  backToTopBtn.addEventListener('click', function () {
    window.scrollTo({ top: 0, behavior: 'smooth' });
  });

  // 滚动时控制按钮显隐逻辑
  window.addEventListener('scroll', function() {
    const scrollDistance = window.pageYOffset || document.documentElement.scrollTop;
    if (scrollDistance > 900) {
      // 模拟fadeIn效果
      backToTopBtn.style.transition = 'opacity 1s ease';
      backToTopBtn.style.display = 'block';
      backToTopBtn.style.opacity = '1';
    } else {
      // 模拟fadeOut效果
      backToTopBtn.style.transition = 'opacity 1s ease';
      backToTopBtn.style.opacity = '0';
      setTimeout(() => {
        if (backToTopBtn.style.opacity === '0') {
          backToTopBtn.style.display = 'none';
        }
      }, 1000);
    }
  });
});

2. 可选优化

你也可以直接将JS代码放置在HTML文件</body>闭合标签之前,即可保证执行时DOM已经渲染完成,无需额外监听DOMContentLoaded事件。

内容的提问来源于stack exchange,提问作者jhon-jhones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 09:36:03