document.body.scrollTop 的值总是等于 0 的解决方法;DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN 与

做页面的时候可能会用到浮动层,读取 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)/2
document.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;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值