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 相关文章推荐
JS获得选取checkbox整行数据的方法
Jan 28 Javascript
高性能JavaScript 重排与重绘(2)
Aug 11 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
React组件内事件传参实现tab切换的示例代码
Jul 04 Javascript
vue-cli3.0使用及部分配置详解
Aug 29 Javascript
详解javascript中的Error对象
Apr 25 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 jQuery
NUXT SSR初级入门笔记(小结)
Dec 16 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
使用refresh_token实现无感刷新页面
Apr 26 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
php基础知识:函数基础知识
2006/12/13 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Web服务器框架 Tornado简介
2014/07/16 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
生产厂长岗位职责
2014/02/21 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书