zoukankan      html  css  js  c++  java
  • 四种浏览器document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释(转载)

    1.四种浏览器对 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释。

    这四种浏览器分别为IE(Internet Explorer)、NS(Netscape)、Opera、FF(FireFox)。

    clientHeight
    大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。

    offsetHeight
    IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
    NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。

    scrollHeight
    IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。
    NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。

    简单地说
    clientHeight 就是透过浏览器看内容的这个区域高度。
    NS、FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。
    IE、Opera 认为 offsetHeight 是可视区域 clientHeight 滚动条加边框。scrollHeight 则是网页内容实际高度。

    同理
    clientWidth、offsetWidth 和 scrollWidth 的解释与上面相同,只是把高度换成宽度即可。

    但是
    FF 在不同的 DOCTYPE 中对 clientHeight 的解释不同, xhtml 1 trasitional 中则不是如上解释的。其它浏览器则不存在此问题。


    2.JS取clientHeight与scrollTop
    先来段数据,下表的值为document.body.clientHeight / document.documentElement.clientHeight

                  IE                FF
    Html        608/0           630/11096
    Xhtml      10942/591     11076/630

    在html/xhtml与ie/ff这4种排列组合下,取得的clientHeight几乎没有一样的,可见写一段兼容3种浏览器两种页面标准的js脚本有多头疼。

    暂时总结的判断方法如下:
    var h1 = document.body.clientHeight;
    var h2 = document.documentElement.clientHeight;
    var isXhtml = (h2<=h1&&h2!=0)?true:false; //判断当前页面的Doctype是否为Xhtml
    var body = isXhtml?document.documentElement:document.body;
    alert(body.clientHeight); //最终结果比较一致

    安全的取到scrollTop:
    document.body.scrollTop + document.documentElement.scrollTop

    判断浏览器的类型,这种写法挺喜欢的:
    var ua = navigator.userAgent.toLowerCase ();
    var os = new Object();
    os.isFirefox = ua.indexOf ("gecko") != -1;
    os.isOpera = ua.indexOf ("opera") != -1;
    os.isIE = !os.isOpera && ua.indexOf ("msie") != -1;


    3.js取到flash对象方法汇总

    IE, FF, Maxthon用document.getElementById(id)
    Opera用 document.embeds(id)

    var isOpera=(window.opera&&navigator.userAgent.match(/opera/gi))?true:false;

    if(isOpera){
    var oswf = document.embeds('ad_flipper_swf');
    }else{
    var oswf = document.getElementById('ad_flipper_swf');
    }转自:http://hi.baidu.com/sing520/blog/item/66540bdffe411b1562279848.html

  • 相关阅读:
    js对象的深度克隆
    通用事件监听函数
    JavaScript封装
    Ajax
    MarkDown怎么在博客园展现出来
    MarkDown语法学习
    暑期培训第三周SDN总结
    暑期培训遇到的floodlight+mininet+ubuntu的问题
    Ubuntu14.04搭建mininet与可视化工具miniedit介绍
    Ubuntu 14.04 安装 Sublime Text 3,并用Sublime Text 3 安装Package Control
  • 原文地址:https://www.cnblogs.com/johnwonder/p/1932654.html
Copyright © 2011-2022 走看看