回答一下:为什么scrollTop总是0?

测试页面如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <style type="text/css">
        body{
            height: 2000px;
        }
    </style>
</head>
<body>
    <script>
        window.onscroll=function () {
            var top=document.body.scrollTop;
            console.log(top);
        }
    </script>
</body>
</html>

Chrome 浏览器下,无论你怎么滚动页面,控制台里输出的就是 0 ;
有人说这是个兼容性问题,也对.
测试代码不变, Chrome , IE 都是 0 ,而 Edge 就能正确的输出.
按浏览器兼容来解决,方法很简单:
document.body.scrollTop 无效的时候,
换用 document.documentElement.scrollTop 就可以了.

var top=document.body.scrollTop || document.documentElement.scrollTop;//兼容写法

这个问题到这里并没有结束,
有人可能遇到这样的情况:

同样的js代码,同样的 Chrome 浏览器,为什么别人能用 document.body.scrollTop ,偏偏我就用不了???

这是个有趣的问题,我研究了一下.
发现区别在于 HTML 代码的DTD声明上:

<!DOCTYPE html>

如果不做DTD声明, Chrome就可以支持 document.body.scrollTop 了.
很怪吧?


但这里要强调一下:

虽然,HTML 5 不基于 SGML,因此不需要对 DTD 进行引用,
但是,依然需要 doctype 来规范浏览器的行为!

一个具有正确文档类型(doctype)的 HTML5 文档:

<!DOCTYPE HTML> 
<html>

    <head>
        <title>Title of the document</title>
    </head>

    <body>
        The content of the document......
    </body>

</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,680评论 1 92
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 7,734评论 0 8
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 8,915评论 1 19
  • 这封信写的很短,是寄给四弟和九弟的。 曾国藩体弱多病,常年服补药,所以劝家中的后辈子弟尤要注意保养。 体弱学射,最...
    读小字阅读 1,703评论 0 1
  • 已经忘记自己有多长时间没有拿起笔写一写与工作无关的东西了,自从工作后,结婚后,有了孩子后,生活的节奏就未曾慢下来,...
    zhaoliyan阅读 1,313评论 0 0