大家好,欢迎来到IT知识分享网。
本文主要解决移动端用返回键后滚动条自动置顶(我是这个问题,可能是用了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)
}
}
});
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23720.html