我遇到的是两种情况:一种是直接在DOM中显示的,一种是Ajax分页的
一、第一种使用cookie的方式
$(function () {
var str = window.location.href;
str = str.substring(str.lastIndexOf("/") + 1);
if ($.cookie(str)) {
$("html,body").animate({ scrollTop: $.cookie(str) }, 1000);
}
else {
}
})
$(window).scroll(function () {
var str = window.location.href;
str = str.substring(str.lastIndexOf("/") + 1);
var top = $(document).scrollTop();
$.cookie(str, top, { path: '/' });
return $.cookie(str);
})
这种方式是使用jQuery库,当然还需要引入jquery.cookie.js文件啦
二、利用h5的技术(localstorage&sessionstorage)
localstorage是本地缓存,不会自动清除;sessionstorage是会话缓存
我是用localstorage来记录ajax分页请求后的数据,sessionstorage来记录位置
page_flag=true;
function ajax_goods(page){
$.ajax({
type: 'post',
url: '__APP__/Shop/Index/ajax_goods_list',
data: 'page='+page+'&n='+Math.random(),
success: function(msg){
//console.log(msg);
if(msg.code=='ok'){
$(".pro_list").append(msg.msg);
localStorage.setItem(page,msg.msg);//记录结果clickState=0;
}else{
$(".pro_list").append(' <span id="ends" style="text-align: center;display: block;height: 40px;float: left;width: 100%;line-height: 40px;">没有更多商品了</span>');
page_flag=false;
}
},
dataType: 'json'
});
}
//页面滑动的位置存储到sessionstorage
$(document).on("touchend",".A_container",function(){
var tops= document.documentElement.scrollTop + document.body.scrollTop;
sessionStorage.setItem("offsetTop", tops);
})
//展示分页内容
function showStorage(page){var storage=window.localStorage;
var str='';
for (var i=2; i <= page; i++) {
if (localStorage.getItem(i)!='') {
str+=localStorage.getItem(i);
}
}
$(".pro_list").append(str);
}
//最后就是展示的效果
//先展示存储本地的数据,然后滑动
$(doucment).ready(funciont(){
var storage=window.localStorage;var key_arrs=new Array();
for (var i = storage.length - 1; i >= 0; i--) {
key_arrs.push(parseInt(localStorage.key(i)));
}
var pageNum=0;
if (storage.length>0) {
pageNum=max(key_arrs);//这个是自己的方法,返回最大页数
if (pageNum>storage.length+1) {
var storages=window.localStorage;
for (var i = storages.length - 1; i >= 0; i--) {
localStorage.removeItem(localStorage.key(i));
}
sessionStorage.removeItem('offsetTop');
page=2;
}else{
showStorage(pageNum);
page=parseInt(pageNum)+1;
}
}
//自动滑动到指定位置
var _offset = sessionStorage.getItem("offsetTop");
$(document).scrollTop('offsetTop');$('html, body').animate({ scrollTop: _offset },10);});
//分页
var clickState = 0;
$(window).scroll(function () {
var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
var scrollHeight = $(document).height();
var windowHeight = $(this).height();
if(page_flag){
if (scrollTop + windowHeight == scrollHeight) {
//获取所有key
var storage=window.localStorage;
var key_arr=new Array();
for(var i=0;i<storage.length;i++){
key_arr.push(storage.key(i));
}
var bool= $.inArray(''+page+'',key_arr);
if (bool<0) {
if (clickState==1) {
}else{
clickState=1;
ajax_goods(page);
page++;
}
}else{
var storage=window.localStorage;
for (var i = storage.length - 1; i >= 0; i--) {
localStorage.removeItem(localStorage.key(i));
}
}
}
}
});
功能基本上能实现了,使用方式全看个人的,如果有更好方式麻烦分享下哦