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 相关文章推荐
JavaScript的Cookies
Jan 16 Javascript
关于js注册事件的常用方法
Apr 03 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
jQuery通过写入cookie实现更换网页背景的方法
Apr 15 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
bootstrap table单元格新增行并编辑
May 19 Javascript
微信小程序实现富文本图片宽度自适应的方法
Jan 20 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
May 10 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
JavaScript实现飞舞的泡泡效果
Feb 07 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/10/09 PHP
笑谈配置,使用Smarty技术
2007/01/04 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
js 异步处理进度条
2010/04/01 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
vue2.0 datepicker使用方法
2018/02/04 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
Python 变量类型详解
2018/10/10 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python三引号输出方法
2019/02/27 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
岗位职责定义及内容
2013/11/08 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
心理学专业求职信
2014/06/16 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript