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 相关文章推荐
HTA版JSMin(省略修饰语若干)基于javascript语言编写
Dec 24 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
分类解析jQuery选择器
Nov 23 Javascript
详解Node.js:events事件模块
Nov 24 Javascript
jquery操作select取值赋值与设置选中实例
Feb 28 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
使用Jenkins部署React项目的方法步骤
Mar 11 Javascript
ElementUI radio组件选中小改造
Aug 12 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
vue实现移动端返回顶部
Oct 12 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
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php组合排序简单实现方法
2016/10/15 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
js中的string.format函数代码
2020/08/11 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
javascript 终止函数执行操作
2014/02/14 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
[00:14]护身甲盾
2019/03/06 DOTA
Python发送email的3种方法
2015/04/28 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
优秀员工表扬信
2014/01/17 职场文书
医院院务公开实施方案
2014/05/03 职场文书
企业党员一句话承诺
2014/05/30 职场文书
师范生求职自荐信
2014/06/14 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫