web前端:从详情页返回列表页,如何定位到列表页之前位置

字数 628阅读 2771

2017/2/21
Android和IOS返回上个页面,数据还在,应该没这个问题了吧。但是在手机端,返回列表页是要重新刷新的,那这个用户体验还是很重要的,要是大型购物网站没有这个功能,用户就要吐血了。

作为前端小白,其他的不会,就用H5的web缓存 localStorage 或者 sessionStorage 实现吧。

分类页:list.html;详情页:detail.html,引入jquery.js。

在list.html 的<script>中添加如下代码:
<pre>
$(document).ready(function(){
var listHistory = localStorage.listHistory || null; //获取list缓存
if(listHistory.fromDetail){//如果是从detail.html返回的,返回上一次浏览位置
select(listHistory.listNumber); //调用select()方法(你自定义的),返回选择的类别
$("#div").scrollTop(listHistory.scrollTop); //返回滚动量
};

$(window).bind('beforeunload',function(){ //离开页面时触发
var scrollTop = $("#div").scrollTop();//记录滚动量
var listHistory= {
"scrollTop" : scrollTop, //滚动量
"listNumber" : $index, //选择的类别
"fromDetail" : false //是否从detail.html返回的
};
localStorage.listHistory = listHistory; //缓存
});
})

</pre>

在detail.html 的<script>中添加如下代码:

<pre>
$(document).ready(function(){
$(window).bind('beforeunload',function(){ //离开页面时触发
localStorage.listHistory.fromDetail = true; //从detail.html出去的,添加一个标识
});
})
</pre>

fromDetail这个标识非必须,看情况取舍。
如果是手机端,数据加载速度不够快的话,返回操作可以延时(setTimeout)一点点。


2017/11/20
无意发现之前写的这篇文章,现在来看这个问题,发现以前那样做实在有点傻,自己也早就不用了。之前的方法会有问题,比如:如果返回的上级页面中有加载更多这种操作,那点击加载更多后,往下滚动了页面,那等下返回的时候,不是还需要先模拟加载更多这个动作?如果加载更多点击了很多次呢,那就难搞了。
单页面的应用(SPA)都会使用路由,从上级页面进入下级页面时,上级页面其实并没有销毁,还在页面中,只是下级页面用定位覆盖在上级页面之上了。返回的时候,下级页面被销毁了,上级页面就重新显现出来了,不就是在原来的位置了吗...(to young to simple)

技术小白,水平有限,仅供参考,欢迎指正 _

推荐阅读更多精彩内容