滚动页面时Uncaught TypeError报错次数持续增加,求技术支持
解决平滑滚动时的Uncaught TypeError问题
错误根源
你的报错是因为部分导航链接的href指向的元素不存在,导致refElement是空的jQuery对象,调用position()方法时触发Uncaught TypeError。每次滚动页面都会执行onScroll函数遍历所有导航链接,所以报错次数会随滚动操作不断增加。
修复方案
1. 过滤无效目标元素,避免空对象调用方法
修改onScroll函数,先检查目标元素是否存在,再执行后续逻辑:
function onScroll(event){ var scrollPos = $(document).scrollTop(); $('.nav li a').each(function () { var currLink = $(this); var targetSelector = currLink.attr("href"); // 跳过非锚点链接或不存在的目标元素 if (!targetSelector || targetSelector === '#' || $(targetSelector).length === 0) { currLink.removeClass("active"); return; } var refElement = $(targetSelector); if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) { $('.nav ul li a').removeClass("active"); currLink.addClass("active"); } else { currLink.removeClass("active"); } }); }
2. 修复平滑滚动中的变量与哈希赋值问题
原代码存在重复声明target变量、哈希赋值错误的问题,同时增加目标元素存在性检查:
$(document).ready(function () { $(document).on("scroll", onScroll); // smoothscroll $('.scroll-to-section a[href^="#"]').on('click', function (e) { e.preventDefault(); $(document).off("scroll"); $('.scroll-to-section a').removeClass('active'); $(this).addClass('active'); var targetSelector = this.hash; var target = $(targetSelector); // 目标元素不存在时直接返回,避免无效操作 if (target.length === 0) { $(document).on("scroll", onScroll); return; } $('html, body').stop().animate({ scrollTop: target.offset().top + 1 }, 500, 'swing', function () { window.location.hash = targetSelector; $(document).on("scroll", onScroll); }); }); });
3. 替换HTML实体字符
注意原代码中的"是HTML实体的双引号,需要全部替换为正常的双引号("),否则代码无法正常执行。
内容的提问来源于stack exchange,提问作者PhilipA1
相关产品推荐
相关产品推荐

