JavaScript实现页面滚动偏移保存功能失效,求排查问题
JavaScript实现页面滚动偏移保存功能失效,求排查问题
嘿,我来帮你梳理下这段代码里的问题,应该是几个小细节没处理到位导致的:
事件绑定对象选错了:你给
document.body绑定了load事件,但这个事件几乎不会被触发哦!正确的做法是把恢复滚动位置的逻辑绑定到window的DOMContentLoaded或者load事件上——前者在DOM结构加载完成后就执行(不需要等图片等资源加载完,用户体验更好),后者会等所有资源加载完毕再执行,选哪个都可以,推荐用DOMContentLoaded。取出的存储值类型不对:
sessionStorage里存的所有数据都是字符串类型,但window.scrollTo的第二个参数需要数字。你直接把取出的scrollpos传进去,虽然部分浏览器会自动转换,但很容易出现意外问题,最好显式转成数字类型。可选的兼容性校验:虽然现在主流浏览器都支持
sessionStorage,但如果要兼容一些极老环境,可以加个支持性判断,避免报错。
给你修改后的代码,你可以试试:
// 页面加载完成后恢复滚动位置 window.addEventListener("DOMContentLoaded", function (event) { // 先判断sessionStorage是否可用 if (!window.sessionStorage) return; const scrollpos = sessionStorage.getItem('scrollpos'); if (scrollpos) { // 把字符串转成数字 window.scrollTo(0, Number(scrollpos)); sessionStorage.removeItem('scrollpos'); } }); // 页面卸载前保存滚动位置 window.addEventListener("beforeunload", function (e) { if (!window.sessionStorage) return; sessionStorage.setItem('scrollpos', window.scrollY); });
另外还有个小提示:如果你的页面是通过浏览器的前进/后退按钮跳转回来的,有些场景下beforeunload可能不会触发,但sessionStorage在同会话里是持续存在的,所以恢复逻辑依然能正常工作。
备注:内容来源于stack exchange,提问作者Nurvy Gamedev
相关产品推荐
相关产品推荐

