window.history.go(-1);后退不刷新问题 移动端

本文主要解决移动端用返回键后滚动条自动置顶(我是这个问题,可能是用了layer的流加载原因,导致返回后自动置顶)或者不刷新问题

  1. 不刷新问题

解决方法:

//在后退到达的界面上添加 判断是否是返回
window.addEventListener('pageshow', function (e) {
    if(e.persisted || (window.performance && window.performance.navigation.type == 2)){
        //刷新页面
        window.location.reload()
    }
});
  1. 滚动条自动置顶问题

解决方法:(其实就是把上面刷新那行改成操作滚动条,需要事先保存滚动条位置)

//页面离开时触发,保存当前滚动条位置
//这个好像有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)
        }
    }
});

你可能感兴趣的:(javascript,html,layui,javascript,html5,开发语言)