今天偶然发现在我的新版chrome(61.0.3163.79)浏览器中,我的滚动到指定元素位置有了问题,具体表现为不是从当前滚动条位置开始的滚动,而变成从0位置开始滚动。
然而在我的safari中没有这个问题
在chrome中,我用来获取滚动条位置的代码 document.body.scrollTop
一直返回的是0
搜了下百度发现 document.documentElement
和 document.body
的区别
原来是 DTD 的问题,要是页面直接用 <html> 开头的话就没有问题了。但是要符合 web 标准,DTD 当然是不能少的。
如果有 DTD 时用,那就用 document.documentElement.scrollTop
代替
document.body.scrollTop
就可以了。
DTD相关说明:
页面具有 DTD,或者说指定了 DOCTYPE 时,使用 document.documentElement。
页面不具有 DTD,或者说没有指定了 DOCTYPE,时,使用 document.body
这文章是12年就有的,可是为什么我之前的chrome没问题呢,真是奇怪
只能改了如下代码来获取滚动条位置,新的chrome也正常滚动了
const getWindowScrollY = () => {
let y;
if(window.pageYOffset){ // all except IE
y = window.pageYOffset;
}
else if(window.document.documentElement && window.document.documentElement.scrollTop){ // IE 6 Strict
y = window.document.documentElement.scrollTop;
} else if(document.body){ // all other IE
y = window.document.body.scrollTop;
}
return y;
};
暂无评论