经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
JS返回页面时自动回滚到历史浏览位置
来源:jb51  时间:2018/9/27 16:26:34  对本文有异议

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

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

页面缓存

使用方法

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

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

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

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

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

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

  1. window.onload = function () {
  2. //载入缓存的列表
  3. loadCache(cacheId);
  4. }
  5.  
  6. window.onunload = function () {
  7. //可以通过needCache这个flag来控制是否需要缓存
  8. if (localStorage.needCache == 'true') {
  9. //离开页面时生成缓存
  10. createCache(cacheId);
  11. }
  12. }
  13.  
  14. /* *
  15. * @brief 可对指定多个控件进行内容和位置的缓存
  16. * @param cacheId 缓存元素的id
  17. * @return null
  18. * */
  19. function createCache(cacheId) {
  20. //对内容进行缓存
  21. var list = [];
  22. var listController = $('.cache');
  23. $.each(listController, function (index, value, array) {
  24. list.push(value.innerHTML);
  25. })
  26. //对浏览到的位置进行缓存
  27. var top = [];
  28. var topController = $(".cache").find(".top");
  29. $.each(topController, function (index, value, array) {
  30. top.push(value.scrollTop);
  31. })
  32. //存入sessionstorage中
  33. sessionStorage.setItem(cacheId, JSON.stringify({
  34. list: list,
  35. top: top
  36. }));
  37. }
  38.  
  39. /* *
  40. * @breif 可对指定多个控件加载缓存
  41. * @param 加载缓存的id
  42. * @return null
  43. * */
  44. function loadCache(cacheId) {
  45. //一定要放在整个js文件最前面
  46. cache = sessionStorage.getItem(cacheId);
  47. if (cache) {
  48. cache = JSON.parse(cache);
  49. //还原内容
  50. var listController = $('.cache');
  51. $.each(listController, function (index, value, array) {
  52. value.innerHTML = cache.list[index];
  53. })
  54. //还原位置
  55. var topController = $(".cache").find(".top");
  56. $.each(topController, function (index, value, array) {
  57. value.scrollTop = cache.top[index];
  58. })
  59. }
  60. }

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

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

总结

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号