测试例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><style type="text/css">        *{ margin: 0; padding: 0;}        body{  border: 10px solid red;}        #inner{width: 2000px; height: 2000px; border: 5px solid blue;}</style></head><body><div id="inner"></div></body></html>

结果:

chrome:

FF

OPERA:

SAFARI:

IE9:

IE8

IE7:

IE6

说明:

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,个人觉得opera和FF算是比较合理的。document.body.offsetWidth返回body的offsetWidthdocument.body.clientwidth返回body的clientwidth(不包含边框),clientwidth = offsetWidth - borderWidth

我们看上面的例子,会发现body和documentElement的有些值是相等的,这并不是表示他们是等同的。而是因为当我们没有给body设置宽度的时候,document.body默认占满整个窗口宽度,于是就有:document.body.scrollWidth = document.documentElement.scrollWidthdocument.body.offsetWidth = document.documentElement.offsetWidthdocument.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

IE7IE7与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 + borderWidthdocument.body.clientwidth返回body的clientwidth(不包含边框)clientwidth = offsetWidth - borderWidth另外,有一点和IE7同样,就是document.documentElement.scrollWidth没有最小宽度限制。

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

    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()                }            }        }

getScrollWith()是获取滚动条尺寸,参见
http://www.cnblogs.com/xesam/archive/2011/11/25/2262957.html
有什么错误欢迎指出

转载于:https://www.cnblogs.com/xesam/archive/2011/11/25/2262983.html

获取浏览器的可视区域尺寸相关推荐

  1. js获取浏览器窗口可视区域大小

    获得浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)的方法: 一.对于IE9+.Chrome.Firefox.Opera 以及 Safari: •  window.innerHeight - 浏 ...

  2. php开发是可视的吗,javascript,html_Jquery判断页面元素是否在浏览器的可视区域内,javascript,html,css,html5 - phpStudy...

    Jquery判断页面元素是否在浏览器的可视区域内 前端开发中,有时需要判断某个元素是否在浏览器的可视区域内,或者是否已经滚动出了可视区域.首先想到的便是javascript操作,原生方法自然可以,不过 ...

  3. ios 百度地图指定区域_获取百度地图可视区域范围的数据

    有个业务场景,需要根据获取到的地图区域显示,根据相应的经纬度反查 左侧区域的会议室. 思路: 1.得到百度地图可视区域--可视区域的中心点 2.可视区域的四个角的其中两个(东北角+西南角) http: ...

  4. 百度地图 json 区域 数据_获取百度地图可视区域范围的数据

    有个业务场景,需要根据获取到的地图区域显示,根据相应的经纬度反查 左侧区域的会议室. 思路: 1.得到百度地图可视区域--可视区域的中心点 2.可视区域的四个角的其中两个(东北角+西南角) http: ...

  5. 获取百度地图可视区域范围的数据

    思路: 得到百度地图可视区域- 可视区域的中心点 可视区域的四个角的其中两个(东北角+西南角) 搜索百度地图API接口: http://lbsyun.baidu.com/cms/jsapi/refer ...

  6. JavaScript获取浏览器的显示区域大小信息

    针对IE Firefox  数值不一样 区域说明 JavaScript Code 网页可见区域宽 document.body.clientWidth 网页可见区域高 document.body.cli ...

  7. html大小和浏览器可视区域一样吗,浏览器窗口可视区域大小

    获得浏用,事少来最差端在事路原们这制码效移,动览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)的朋支不器几事为的时后级功发发来久都这样含制层是请些间例业多在上屏屏方法: 一.如算上处定面一这我作问 ...

  8. 浏览器窗口可视区域大小相关方法

    一.对于IE9+.Chrome.Firefox.Opera 以及 Safari: •  window.innerHeight - 浏览器窗口的内部高度 •  window.innerWidth - 浏 ...

  9. JavaScript获取浏览器可视区域的宽高

    JavaScript获取浏览器可视区域的宽高 在做项目的时候,我们常常需要对项目做一些优化,来提升页面响应的速度,比如进入可视区域后再发送请求获取数据或者是填充模板,这个时候就需要能够获取到浏览器的可 ...

最新文章

  1. VS2005设计智能客户端(二)使用clickonce部署应用程序
  2. 神经网络neural network简单理解
  3. 计算机专业408题目结构,2019考研408计算机组成原理知识:计算机系统层次结构
  4. 收藏 | 深度学习不确定性量化: 技术、应用与挑战
  5. 最速下降法极小化rosenbrock函数 代码_典型算法思想与应用9|分支限界法与电路布线问题
  6. 【C/C++】使用PDFLIB创建一个带中文的pdf文件
  7. 二、文章发布页制作及后台实现《iVX低代码/无代码个人博客制作》
  8. 2022年低压电工考试题库及模拟考试
  9. 有趣好玩的Linux之代码雨效果
  10. codecademy课程笔记——JavaScript Promise
  11. Java程序员找工作很难吗?可能没有get这些内容
  12. 一起来探索从双击程序到开始运行期间计算机经历了哪些过程
  13. ios学习笔记之三- iPhone模拟器基本操作
  14. 正方教务系统爬虫实现
  15. 漏洞分析---关于OpenSSL“心脏出血”漏洞的分析
  16. 组件化架构搭建——铺路Android架构师
  17. git常见操作和常见错误
  18. 【历史上的今天】3 月 24 日:苹果推出 Mac OS X;微软前任 CEO 出生;Spring 1.0 正式发布
  19. JetBrains开发者日见闻(一)之Kotlin/Native 尝鲜篇
  20. 【李开复】大学四年应该这么度过(四)

热门文章

  1. 即将放弃python的app_即将放弃Python 2.7的不止有Numpy,还有pandas和这些工具
  2. oracle 值集附加列,EBS值集知识小结
  3. Codeforces 1480A. Yet Another String Game (阅读理解题)
  4. VC控件 Progress Control
  5. 牛客 contest893 G-Truthman or Fakeman
  6. php每个月头一天与最后一天,PHP获取每月第一天与最后一天
  7. 关于tensorflow和keras那些事儿
  8. windows7下安装centos7双系统(未验证)
  9. html代码class=,css class是啥?
  10. int类型在计算机中的储存(原码、补码、反码)