scrollTop()的兼容性问题

公司的移动端项目之前使用$("body").scrollTop()方法在微信和QQ浏览器中都使用正常,后来到了荣耀平板上Chrome浏览
器就失灵了,取值始终为0。猜想到了是由于浏览器的兼容性问题,具体也就不去研究,先上解决方案:
//获取窗口滚动高度
function getScrollTop(){
    var scrollTop = window.pageYOffset
    || document.documentElement.scrollTop
    || document.body.scrollTop
    || 0;
    return scrollTop;
}

//设置窗口滚动
$("body").scrollTop(200); //微信、QQ浏览器正常,PC端模拟和移动端Chrome下有问题
$("html").scrollTop(200); // 微信、QQ浏览器无效

// 另外一种写法就都生效了
$("html,body").scrollTop(200);
console.log($("html,body").scrollTop()) //输出 200

//最终采取的方式,兼容性好
$(window).scrollTop(200);
console.log($(window).scrollTop()) //输出 200
有一点要注意的是如果需要滚动的不是body,那么获取和设置的时候就要注意了,下面是测试的结果:
html和body均未设置高度,容器设置固定高度calc(100vh + 189px);overflow-y:auto;

这里写图片描述

可以得出一个结论,如果JQ里面写了多个选择器,返回的是最外层的滚动距离,但是$("body,html")除外,
一般情况下,body和html只会有一个有值,但是$("body,html")始终返回有值的一个。

另外一个注意的点就是,在移动端QQ浏览器这些,有时候向上滚动时,window的高度发生了变化,弹窗的位置确还是原来的,导致弹窗的顶部被手机的状态栏给遮住了,所以需要在弹窗弹出来后$(window).scrollTop(0)。

猜你喜欢

转载自blog.csdn.net/bluelotos893/article/details/80663190