• 区域尺寸


    网上流传比较广的图示:

    网页可见区域宽:document.body.clientWidth

    网页可见区域高:document.body.clientHeight

    网页可见区域宽:document.body.offsetWidth (包括边线的宽)

    网页可见区域高:document.body.offsetHeight (包括边线的宽)

    网页正文全文宽:document.body.scrollWidth

    网页正文全文高:document.body.scrollHeight

    网页被卷去的高:document.body.scrollTop

    网页被卷去的左:document.body.scrollLeft

    网页正文部分上:window.screenTop

    网页正文部分左:window.screenLeft

    屏幕分辨率的高:window.screen.height

    屏幕分辨率的宽:window.screen.width

    屏幕可用工作区高度:window.screen.availHeight

    屏幕可用工作区宽度:window.screen.availWidth

    scrollWidth 

    是对象的实际内容的宽,不包边线宽度,会随对象中内容的多少改变(内容多了可能会改变对象的实际宽度) 

    clientWidth 

    是对象可见的宽度,不包滚动条等边线,会随窗口的显示大小改变。 

    offsetWidth 

    是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变。

    *document.body.clientWidth和document.documentElement.clientWidth有如下区别: 

    如果在页面中添加W3C标准标记: 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 

    在IE中: 

    document.body.clientWidth ==> BODY对象宽度 

    document.body.clientHeight ==> BODY对象高度 

    document.documentElement.clientWidth ==> 可见区域宽度 

    document.documentElement.clientHeight ==> 可见区域高度 

    在FireFox中: 

    document.body.clientWidth ==> BODY对象宽度 

    document.body.clientHeight ==> BODY对象高度 

    document.documentElement.clientWidth ==> 可见区域宽度 

    document.documentElement.clientHeight ==> 可见区域高度 

    在Opera中: 

    document.body.clientWidth ==> 可见区域宽度 

    document.body.clientHeight ==> 可见区域高度 

    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽) 

    document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高) 

    如果没有定义W3C的标准,则 

    IE为: 

    document.documentElement.clientWidth ==> 0 

    document.documentElement.clientHeight ==> 0 

    FireFox为: 

    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽) 

    document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

    Opera为: 

    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽) 

    document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

    Chrome/FF/Safari/opera浏览器

    window有个属性innerWidth/innerHeight包含的是整个文档的可视区域尺寸,注意,这个尺寸是包含滚动条大小的。

    如果我们不计滚动条的影响,就可以直接使用这两个属性。

    如果滚动条会影响(比如最大化弹出框),那么应该想另外的办法。

    Document对象是每个DOM树的根,但是它并不代表树中的一个HTML元素,document.documentElement属性引用了作为文档根元素的html标记,document.body属性引用了body标记

    我们这里获取常见的三个值(scrollWidth、offsetWidth和clientwidth)来比较一下

    document.documentElement.scrollWidth返回整个文档的宽度

    document.documentElement.offsetWidth返回整个文档的可见宽度

    document.documentElement.clientwidth返回整个文档的可见宽度(不包含边框),clientwidth = offsetWidth - borderWidth

    不过一般来说,我们不会给document.documentElement来设置边框,所以这里的clientwidth 与 offsetWidth一致

    document.body.scrollWidth返回body的宽度

    注意,这里的scrollWidth有个不一致的地方,基于webkit的浏览器(chrome和safari)返回的是整个文档的宽度,也就是和document.documentElement.scrollWidth一致,

    opera和FF返回的就是标准的body 的scrollWidth,document.body.scrollWidth

    document.body.offsetWidth返回body的offsetWidth

    document.body.clientwidth返回body的clientwidth(不包含边框),clientwidth = offsetWidth - borderWidth

    body和documentElement的有些值是相等的,这并不是表示他们是等同的。而是因为当我们没有给body设置宽度的时候,document.body默认占满整个窗口宽度,于是就有:

    document.body.scrollWidth = document.documentElement.scrollWidth

    document.body.offsetWidth = document.documentElement.offsetWidth

    document.body.clientwidth = document.documentElement.clientwidth - document.body.borderWidth(body的边框宽度)

    当我们给body设置了一个宽度的时候,就有区别了。

    IE9/IE8浏览器

    这两个差不多,唯一的区别是IE9包含window.innerWidth属性,而IE8不包含window.innerWidth属性。

    document.documentElement.scrollWidth返回整个文档的宽度,和FF等浏览器一致

    document.documentElement.offsetWidth返回整个文档的可见宽度(包含滚动条,值和innerWidth一致),注意,这里和FF等浏览器又有点区别。

    document.documentElement.clientwidth返回整个文档的可见宽度(不包含边框),和FF等浏览器一致。clientwidth = offsetWidth - 滚动条宽度

    document.body.scrollWidth返回body的宽度,注意,这里的scrollWidth和FF等浏览器有点区别,这里并不包括body本身的border宽度。因此例子中,相比FF少了10px。

    document.body.offsetWidth返回body的offsetWidth,和FF等浏览器一致

    document.body.clientwidth返回body的clientwidth(不包含边框),和FF等浏览器一致,clientwidth = offsetWidth - borderWidth

    IE7浏览器

    IE7与IE9/IE8的主要区别是

    第一、document.documentElement.offsetWidth的返回值不一样,

    参见上面说的,IE9/IE8的document.documentElement.offsetWidth包含滚动条,但是,IE7的document.documentElement.offsetWidth不包含滚动条。

    第二、document.documentElement.scrollWidth返回整个文档的宽度,

    注意,这里和IE9/IE8、FF等浏览器又有不一致,对于IE9/IE8、FF等浏览器,scrollWidth最小不会小于窗口的宽度,但是在IE下没有这个限制,文档有多小,这个就有多小。其他倒是挺一致的。

    IE6浏览器

    IE6的document.documentElement返回值与IE9/IE8没有区别(由此可见,对于document.documentElement,IE7就是个奇葩)。

    话说回来,IE的document.body就是个奇葩,当没有给body设置宽度的时候,body是默认占满整个文档的(注意,其他的浏览器都是占满整个窗口),当然,最小值是整个窗口的大小,就是说body指向了根元素。

    因此,在算上IE6在解析width方面的bug,和其他的浏览器的区别就淋漓尽致了。

    document.body.scrollWidth返回body的宽度,和IE9/IE8/IE7一致

    document.body.offsetWidth返回body的offsetWidth,注意,由于body的不同,这里的offsetWidth = scrollWidth + borderWidth

    document.body.clientwidth返回body的clientwidth(不包含边框)clientwidth = offsetWidth - borderWidth

    另外,有一点和IE7同样,就是document.documentElement.scrollWidth没有最小宽度限制。

    总结一下,在标准模式下,我们获取文档可见区域的方法如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    window.onload = function(){
        function getViewSizeWithoutScrollbar(){//不包含滚动条 
            return { 
                width : document.documentElement.clientWidth, 
                height: document.documentElement.clientHeight 
            } 
        } 
        function getViewSizeWithScrollbar(){//包含滚动条 
            if(window.innerWidth){ 
                return { 
                    width : window.innerWidth, 
                    height: window.innerHeight 
            } 
            }else if(document.documentElement.offsetWidth == document.documentElement.clientWidth){ 
                return { 
                    width : document.documentElement.offsetWidth, 
                    height: document.documentElement.offsetHeight 
                } 
            }else{ 
                return { 
                    width : document.documentElement.clientWidth + getScrollWith(), 
                    height: document.documentElement.clientHeight + getScrollWith() 
                } 
            } 
        } 
    }
    </script>
    </head>
    
    <body>
    </body>
    </html>

    getScrollWith()获取滚动条的宽度

    代码见http://www.cnblogs.com/laborc/archive/2013/05/08/3066893.html

  • 相关阅读:
    【Leetcode_easy】961. N-Repeated Element in Size 2N Array
    【Leetcode_easy】953. Verifying an Alien Dictionary
    【Leetcode_easy】949. Largest Time for Given Digits
    【Leetcode_easy】944. Delete Columns to Make Sorted
    【Leetcode_easy】942. DI String Match
    【Leetcode_easy】941. Valid Mountain Array
    【Leetcode_easy】938. Range Sum of BST
    【Leetcode_easy】937. Reorder Log Files
    【Leetcode_easy】933. Number of Recent Calls
    【Leetcode_easy】929. Unique Email Addresses
  • 原文地址:https://www.cnblogs.com/laborc/p/3066864.html
Copyright © 2020-2023  润新知