阅读(469)评论(0)

banner

今天偶然发现在我的新版chrome(61.0.3163.79)浏览器中,我的滚动到指定元素位置有了问题,具体表现为不是从当前滚动条位置开始的滚动,而变成从0位置开始滚动。

然而在我的safari中没有这个问题

在chrome中,我用来获取滚动条位置的代码 document.body.scrollTop 一直返回的是0

搜了下百度发现 document.documentElementdocument.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;
};

发表评论

评论

暂无评论

    本日の格言
    博主闪亮登场!

    你的那双手呢,是为了紧紧抓住什么而存在的哦。
    by 仰望半月的夜空

    超想说
    博主の友人
    对!就是这种低调,如同吃了炫迈
    超有爱
    TOP