做页面的时候可能会用到位置固定的层,读取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;

最新文章

  1. TextVeiw 的 No package identifier when getting value for resource numb
  2. shell选择语句
  3. 【BZOJ-1014】火星人prefix Splay + 二分 + Hash
  4. Tank游戏需求分析兼项目计划发布!
  5. hdu 5441 Travel(并查集)
  6. html5精品教程
  7. SVG 入门——理解viewport,viewbox,preserveAspectRatio
  8. SDK目录结构
  9. Hibernate中配置文件的学习
  10. 【文文殿下】NOIp2018游记
  11. OneZero第四周第一次站立会议(2016.4.11)
  12. c# &与&& 和 |与||的区别
  13. popup定位引擎popper.js介绍
  14. Angular7教程-01-Angular开发环境配置
  15. [学习]ulimit
  16. 170505、MySQL的or/in/union与索引优化
  17. linux系统时间获取方式
  18. BZOJ1590:[Usaco2008 Dec]Secret Message秘密信息
  19. [GO]方法的继承
  20. Jmeter断言、参数化及集合点

热门文章

  1. Java——JDK1.5新增强的for循环
  2. Shell的简单介绍(一)
  3. LOJ504「LibreOJ β Round」ZQC 的手办
  4. Memcache和Redis复习总结
  5. MySQL高可用方案 MHA之四 keepalived 半同步复制
  6. 搜狗词库转txt
  7. Idea导入项目详解
  8. ES与CQRS之旅
  9. 自动化测试中,元素无法点击定位等问题的解决:js的使用方法
  10. 3 Vue.js基础