ajax后退列表缓存,Ajax分页返回保留状态

前言

有时候,我们会遇到类似这样的问题:当你在访问一个商城的商品列表页,看到了一个自己感兴趣的产品并点击进去查看详情,而看完后返回列表页的时候,某些浏览器并不会保留之前的阅读状态,而是会刷新页面,使列表回到顶部。但从用户体验的角度来说,我们期望的是返回后能够再次回到自己之前阅读的位置。

方案概述

进入详情页时,使用 sessionStorage.setItem() 存储状态

返回列表页时,使用 sessionStorage.getItme() 获取状态,并滚动到页面对应位置

具体实现

页面结构demo

定义公用的函数:

/**

* 存储sessionStorage

* @key: String

* @value: Object

*/

function setSession(key, value) {

var curTime = new Date().getTime();

sessionStorage.setItem(key,JSON.stringify({data: value, time: curTime}));

}

/**

* 提取对应的sessionStorage信息

* @key: String

* @time: Number

* return: Object

*/

function getSession(key, time) {

var data = sessionStorage.getItem(key);

var dataObj = JSON.parse(data);

if (new Date().getTime() - dataObj.time > time) {

console.log('信息已过期');

sessionStorage.removeItem(key);

return false;

} else {

var localValuetoJson = JSON.parse(dataObj.data);

return localValuetoJson;

}

}

/**

* 给列表项添加点击事件存储sessionStorage

* @page: Number 当前页数

* @html: String 已加载的分页html

*/

function addSessionClick(page, html) {

$('#listWrap .item').on('click', function(){

var top = $(window).scrollTop();

var cachevalue = {

page: page,

scrollTop: top,

host: location.hostname,

path: location.pathname,

html: html

};

setSession('pageScroll', JSON.stringify(cachevalue));

});

}

具体调用

var demo = {

pageCache: {

cachehtml: '',

cachepage: 2

},

listWrap: $('#listWrap'),

init: function () {

this.cachehtml = this.pageCache.cachehtml;

this.cachepage = this.pageCache.cachepage;

this.pageSession = sessionStorage.getItem('pageScroll');

// 判断是否有保留状态

if( this.pageSession !== null && this.pageSession !== '' ){

var localValue = getSession('pageScroll', 1000*300);//设置缓存时间为五分钟

// 判断当前页面是否是之前访问的列表页

if (localValue.host === location.hostname && localValue.path === location.pathname) {

this.page = localValue.page;

this.listWrap.append(localValue.html);

this.cachehtml = localValue.html;

// 滚动到对应位置

setTimeout(function () {

$(window).scrollTop(localValue.scrollTop);

}, 300);

addSessionClick(localValue.page, localValue.html);

} else {

addSessionClick(this.page, this.cachehtml);

}

}

};

总结

类似这样的ajax分页问题在实际开发中会比较经常遇到,本文只是提供一个可行的思路,亲测有效,但并不算是一个很完整的demo,敬请见谅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值