本文主要解决移动端用返回键后滚动条自动置顶(我是这个问题,可能是用了layer的流加载原因,导致返回后自动置顶)或者不刷新问题
不刷新问题
解决方法:
//在后退到达的界面上添加 判断是否是返回
window.addEventListener('pageshow', function (e) {
if(e.persisted || (window.performance && window.performance.navigation.type == 2)){
//刷新页面
window.location.reload()
}
});滚动条自动置顶问题
解决方法:(其实就是把上面刷新那行改成操作滚动条,需要事先保存滚动条位置)
//页面离开时触发,保存当前滚动条位置
//这个好像有bug,说是要停留页面五秒才能正常触发,建议如果能捕获离开的方法的话,在那里保存更妥当
window.onbeforeunload = function () {
var scrollPos;
if (typeof window.pageYOffset != 'undefined') {
scrollPos = window.pageYOffset;
} else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
scrollPos = document.documentElement.scrollTop;
} else if (typeof document.body != 'undefined') {
scrollPos = document.body.scrollTop;
}
//保存滚动条位置
sessionStorage.setItem("indexScTop",scrollPos)
}
//判断页面是否有滚动条(因为layer手机端流加载【返回上一页】时有重新渲染,防止设置滚动条复原太早)
function hasScrollbar() {
return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight)
}
//判断用户是不是通过后退按钮访问本页面的
window.addEventListener('pageshow', function (e) {
if(e.persisted || (window.performance && window.performance.navigation.type == 2)){
if(sessionStorage.getItem("indexScTop")){
// window.scrollTo(0,Number(sessionStorage.getItem("indexScTop")))
const setIndexScTop = setInterval(function () {
if(hasScrollbar()){
document.body.scrollTop = document.documentElement.scrollTop = parseInt(sessionStorage.getItem("indexScTop"));
sessionStorage.removeItem("indexScTop")
clearInterval(setIndexScTop)
}
},100)
}
}
});

文章提供了两种解决方案:一是通过监听pageshow事件并在必要时执行页面刷新,以处理不刷新问题;二是利用sessionStorage保存滚动条位置,并在页面显示时恢复,解决返回后滚动条自动置顶的问题。这种方法特别针对使用layer流加载的场景。
5243

被折叠的 条评论
为什么被折叠?



