zoukankan      html  css  js  c++  java
  • document.body.scrollTop值为0的解决方法[转]

    做页面的时候可能会用到位置固定的层,读取document.body.scrollTop来设置层的位置,像这样,
     
        window.onscroll=function () {
            var oId=document.getElementByIdx_x("id");
            oId.style.top=document.body.scrollTop+"px";
        }
     
        可是怎么没有达到预期效果呢,输出document.body.scrollTop的值一看,一直都是0.原来是DTD的问题,要是页面直接用开头的话就没有问题了.但是要符合web标准,DTD当然是不能少的.使用DTD时用document.documentElement.scrollTop代替document.body.scrollTop就可以了
     
        window.onscroll=function () {
            var oId=document.getElementByIdx_x("id");
            oId.style.top=document.documentElement.scrollTop+"px";
        }
        或者用函数来解决:
        function get_scrollTop_of_body(){ 
            var scrollTop; 
            if(typeof window.pageYOffset != 'undefined'){//pageYOffset指的是滚动条顶部到网页顶部的距离
                scrollTop = window.pageYOffset; 
            }else if(typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat')        { 
                scrollTop = document.documentElement.scrollTop; 
            }else if(typeof document.body != 'undefined'){ 
                scrollTop = document.body.scrollTop; 
            
            return scrollTop; 
        }
     
    注:IE对盒模型的渲染在 Standards ModeQuirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有很大差别,而在不声明Doctype的情况下,IE默认又是Quirks Mode。所以为兼容性考虑,我们可能需要获取当前的文档渲染方式。 
        document.compatMode正好派上用场,它有两种可能的返回值:BackCompatCSS1Compat,对其解释如下: 
        BackCompat: Standards-compliant mode is not switched on. (Quirks Mode) 
        CSS1Compat: Standards-compliant mode is switched on. (Standards Mode) 
        在实际的项目中,我们还需要在获取浏览是否IE,这样就可以得到IE的渲染模式了。
        当文档有了标准声明时, document.compatMode 的值就等于 "CSS1compat", 因此,我们可以根据 document.compatMode 的值来判断文档是否加了标准声明: 
        var height = document.compatMode=="CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight;
  • 相关阅读:
    利用DTrace实时检测MySQl
    改进MySQL Order By Rand()的低效率
    RDS for MySQL查询缓存 (Query Cache) 的设置和使用
    RDS For MySQL 字符集相关说明
    RDS for MySQL 通过 mysqlbinlog 查看 binlog 乱码
    RDS for MySQL Mysqldump 常见问题和处理
    RDS for MySQL Online DDL 使用
    RDS MySQL 表上 Metadata lock 的产生和处理
    RDS for MySQL 如何使用 Percona Toolkit
    北京已成为投融资诈骗重灾区:存好骗子公司黑名单,谨防上当!
  • 原文地址:https://www.cnblogs.com/xccjmpc/p/3771203.html
Copyright © 2011-2022 走看看