JS实现刷新网页后保持滚动位置不变的两种方案

作者:半夏

时间:2026-10-26

浏览:525

本文详解如何在网页刷新后保持用户之前的浏览位置。通过监听滚动事件,将scrollTop值存入Cookie或localStorage。文章提供了两种代码实现方案:一种是集中处理滚动逻辑,另一种是将Cookie存取封装为独立函数,确保兼容老旧浏览器并提高代码灵活性。

文章目录

正文

在京东浏览商品时,观察到一个便捷的功能:当用户浏览到页面中间位置时,如下图所示:

正文

重新加载或刷新网页后,滚动条会自动定位回之前浏览的位置,这一体验非常实用。

该功能的具体实现原理,经查阅相关资料得知。

其核心机制是利用滚动条的scrollTop属性。

基本实现逻辑是:在滚动条移动过程中,实时获取当前滚动位置,并将其存储到Cookie或localStorage中。需要注意的是,部分老旧浏览器版本对localStorage的支持可能不够完善。

若希望使用localStorage实现此功能,可参考《VUE自学笔记之使用localstorage和sessionstorage实现登录》一文。

本文示例采用Cookie进行数据存储。

这里介绍两种具体的实现方法。

方法一:代码逻辑相对集中。

/**
 * @name: 控制 浏览器滚动条
 * @author: camellia
 * @email: guanchao_gc@qq.com
 * @date: 2022-01-10 
 */
window.onscroll = function() {
        var scrollPos;
        if (typeof window.pageYOffset != 'undefined') {
            scrollPos = window.pageYOffset;
        }
        else if (typeof document.body != 'undefined') {
            scrollPos = document.body.scrollTop;
        }
        document.cookie = "scrollTop=" + scrollPos; 
    }
    window.onload = function (){
        if (document.cookie.match(/scrollTop=([^;]+)(;|$)/) != null) {
            var arr = document.cookie.match(/scrollTop=([^;]+)(;|$)/); 
            document.body.scrollTop = parseInt(arr[1]); 
        }
    }

方法二:将Cookie的读取与写入分别封装为独立函数。

第二种方式将Cookie的存取操作封装成独立函数,使得调用更加灵活方便。

window.onscroll = function() {
        var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
        SetCookie("a", scrollTop);
    }
    window.onload = function () {
        document.body.scrollTop = GetCookie("a");//页面加载时设置scrolltop高度
    }
    /**
     * @name: 设置cookie
     * @author: camellia
     * @email: guanchao_gc@qq.com
     * @date: 2022-01-10 
     */
    function SetCookie(sName, sValue) {
        document.cookie = sName + "=" + escape(sValue) + "; ";
    }
    /**
     * @name: 读取cookie
     * @author: camellia
     * @email: guanchao_gc@qq.com
     * @date: 2022-01-10 
     */
    function GetCookie(sName) {
        var aCookie = document.cookie.split("; ");
        for (var i = 0; i < aCookie.length; i++) {
            var aCrumb = aCookie[i].split("=");
            if (sName == aCrumb[0])
            {
                return unescape(aCrumb[1]);
            }
        }
        return 0;
    }

本质上,这只是一个对Cookie进行存储与取值,并结合scrollTop赋值的过程,实现难度不大。

上述两段代码,一般情况下直接嵌入项目中即可正常运行。

若遇到无法生效的情况,请检查项目中其他代码是否对scrollTop属性进行了覆盖赋值。

以上就是JS实现刷新网页后之前浏览位置保持不变示例详解的详细内容,更多关于JS刷新网页浏览位置保持的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章