JS实现刷新网页后之前浏览位置保持不变示例详解


Posted in Javascript onAugust 14, 2022

正文

在京东上浏览的时候,发现了一个比较人性化的小功能,浏览商品,浏览到一半的时候,如下图所示:

JS实现刷新网页后之前浏览位置保持不变示例详解

我重新加载网页,刷新之后,滚动条依然定位在我刚刚浏览的位置,这个小功能感觉还不错,挺方便的。

具体是怎么实现的呢,去网上大概查了一下。

这个是使用滚动条属性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刷新网页浏览位置保持的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript Archive Network 集合
May 12 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
Oct 15 Javascript
JS生成随机字符串的多种方法
Jun 10 Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
基于jQuery的左滑出现删除按钮的示例
Aug 29 jQuery
详解Javascript 中的 class、构造函数、工厂函数
Dec 20 Javascript
解决layer弹层遮罩挡住窗体的问题
Aug 17 Javascript
AngularJS $http post 传递参数数据的方法
Oct 09 Javascript
JS封装cavans多种滤镜组件
Feb 15 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 #Vue.js
Vue深入理解插槽slot的使用
Aug 05 #Vue.js
React如何使用axios请求数据并把数据渲染到组件
Aug 05 #Javascript
使用JS前端技术实现静态图片局部流动效果
Aug 05 #Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 #Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 #Javascript
pnpm对npm及yarn降维打击详解
Aug 05 #Javascript
You might like
PHP 彩色文字实现代码
2009/06/29 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
浅谈php7的重大新特性
2015/10/23 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
django+mysql的使用示例
2018/11/23 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
django使用多个数据库的方法实例
2021/03/04 Python
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
服装公司总经理岗位职责
2013/11/30 职场文书
教导处工作制度
2014/01/18 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL