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

原生JavaScript实现平滑滚动报addEventListener null错误求助

问题排查与修复方案

核心报错原因

你的错误直接来自JS代码中querySelector的语法错误:

  • 你要选择class为section1的元素,正确的类选择器需要加.前缀,你写的document.querySelector('section1')会被识别为选择名为<section1>的自定义标签,页面中不存在该标签,所以返回null,调用addEventListener自然就抛出空指针错误。

其他需要修复的问题

  • 你绑定点击事件的元素是a标签,默认点击会触发跳转刷新行为,会导致滚动效果失效,需要阻止默认行为。
  • 建议添加空值判断,避免目标元素不存在时后续代码继续抛出错误。

修复后的完整JS代码

function smoothScroll(target, duration){
    var target = document.querySelector(target);
    // 新增空值判断,避免目标不存在时报错
    if (!target) return
    var targetPosition = target.getBoundingClientRect().top;
    var startPosition = window.pageYOffset;
    var distance = targetPosition - startPosition;
    var startTime = null;

    function animation(currentTime){
        if(startTime === null) startTime = currentTime;
        var timeElapsed = currentTime - startTime;
        var run = ease(timeElapsed,startPosition,distance,duration);
        window.scrollTo(0, run);
        if(timeElapsed < duration) requestAnimationFrame(animation)
    }
    function ease(t, b, c, d) {
        t /= d/2;
        if (t < 1) return c/2*t*t + b;
        t--;
        return -c/2 * (t*(t-2) - 1) + b;
    };

    requestAnimationFrame(animation);
}

// 修复选择器语法,添加类选择器前缀.
var section1 = document.querySelector('.section1');
section1.addEventListener('click',function(e){
    // 阻止a标签默认跳转行为
    e.preventDefault()
    smoothScroll('.section2', 1000)
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:27:04