JS返回页面时自动回滚到历史浏览位置


Posted in Javascript onSeptember 26, 2018

在我的系统实际开发过程中遇到一个需求,我需要让应用在各个页面间跳转时回到每页原先浏览到的位置,方便用户使用。

在网上查资料时,看到的方案有不少,众说纷纭,但真正给出可行可用代码的寥寥无几,所以我干脆按自己的想法用SessionStorage写了一个缓存页面的方法,在离开页面时将需要缓存的容器中所有内容都存到SessionStorage中,在返回页面时重新加载,方便用户操作,效果如下:

JS返回页面时自动回滚到历史浏览位置

页面缓存

使用方法

用法也很简单,咱一步一步讲。

首先,在你需要缓存标签容器的类名中加入cache,并写一个name作为该容器的唯一标记,示例如下:

<div class="weui-tab cache" name="index">
 ....
</div>

其次,声明全局变量,获取缓存内容和容器,示例如下:

var cache;
var cacheId = $(".cache").attr("name");

随后,在页面加载时调用缓存,在离开页面时生成缓存,代码如下:

window.onload = function () {
 //载入缓存的列表
 loadCache(cacheId);
}

window.onunload = function () {
 //可以通过needCache这个flag来控制是否需要缓存
 if (localStorage.needCache == 'true') {
  //离开页面时生成缓存
  createCache(cacheId);
 }
}

/* *
 * @brief 可对指定多个控件进行内容和位置的缓存
 * @param cacheId 缓存元素的id
 * @return null
 * */
function createCache(cacheId) {
 //对内容进行缓存
 var list = [];
 var listController = $('.cache');
 $.each(listController, function (index, value, array) {
  list.push(value.innerHTML);
 })
 //对浏览到的位置进行缓存
 var top = [];
 var topController = $(".cache").find(".top");
 $.each(topController, function (index, value, array) {
  top.push(value.scrollTop);
 })
 //存入sessionstorage中
 sessionStorage.setItem(cacheId, JSON.stringify({
  list: list,
  top: top
 }));
}

/* *
 * @breif 可对指定多个控件加载缓存
 * @param 加载缓存的id
 * @return null
 * */
function loadCache(cacheId) {
 //一定要放在整个js文件最前面
 cache = sessionStorage.getItem(cacheId);
 if (cache) {
  cache = JSON.parse(cache);
  //还原内容
  var listController = $('.cache');
  $.each(listController, function (index, value, array) {
   value.innerHTML = cache.list[index];
  })
  //还原位置
  var topController = $(".cache").find(".top");
  $.each(topController, function (index, value, array) {
   value.scrollTop = cache.top[index];
  })
 }
}

大部分都可以直接copy,再根据你的需要改进一下,就可以很好的使用了。

github传送地址: https://github.com/JunJieDing666/YouZhiGou

总结

以上所述是小编给大家介绍的JS返回页面时自动回滚到历史浏览位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
Aug 30 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
jQuery+HTML5加入购物车代码分享
Oct 29 Javascript
理解javascript定时器中的单线程
Feb 23 Javascript
javascript 数组的定义和数组的长度
Jun 07 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
js如何编写简单的ajax方法库
Aug 02 Javascript
JavaScript中的一些隐式转换和总结(推荐)
Dec 22 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
Sep 17 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
Sep 26 #Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
Sep 26 #Javascript
深入理解react-router 路由的实现原理
Sep 26 #Javascript
node.js使用redis储存session的方法
Sep 26 #Javascript
详解Axios统一错误处理与后置
Sep 26 #Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 #Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 #Javascript
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
拖动时防止选中
2017/02/03 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
python实现简单的计时器功能函数
2015/03/14 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
师范生个人推荐信
2013/11/29 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
升国旗仪式主持词
2014/03/19 职场文书
2014年物流工作总结
2014/11/25 职场文书
用python画城市轮播地图
2021/05/28 Python