做页面的时候可能会用到浮动层,读取 document.body.scrollTop 来设置层的位置,如以下代码,可以达到让一个ID为“Div1”的层一直居中显示的目的:
<script language=’javascript’>function Sc(){document.getElementById(“Div1″).style.top=document.body.scrollTop+(document.body.clientHeight-document.getElementById(“Div1″).offsetHeight)/2document.getElementById(“Div1″).style.left=document.body.scrollLeft+(document.body.clientWidth-document.getElementById(“Div1″).offsetWidth)/2;}window.οnscrοll=Sc;window.οnresize=Sc;window.οnlοad=Sc;</script>
但是却发现总是有问题,很奇怪啊,以前明明用过的,没有问题,这次是怎么回事呢。
用排除法慢慢试了试,发现居然跟第一行有关系……
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
有这行就不起作用,没有的话就可以起作用了,不过去掉这行DTD声明后,很多以前的样式都变了,要是为此去改样式的话,实在太麻烦了,经过查询,发现,有了DTD声明之后,document.body.scrollTop 的值就会总是等于0,解决办法就是在有 DTD 时用 document.documentElement.scrollTop 代替 document.body.scrollTop 就可以正常使用了。
总结:
- 页面具有 DTD(或指定了 DOCTYPE)时,使用 document.documentElement。
- 页面不具有 DTD(或没有指定了 DOCTYPE)时,使用 document.body。
- 在 IE 和 Firefox 中均是如此。
- 为了兼容(不管有没有 DTD),可以使用如下代码:
var scrollTop = window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop|| 0;