JavaScript世界中,有很多看起来能够帮我们知道网页宽度和高度的API,但太繁多了,而且容易弄混、不容易区分它们。下面我就来介绍一下,这些API到底是什么意思,之间的区别又在哪里。

一、设备的分辨率

window.screen.width × window.screen.height

台式机:1440 × 900 / 手机:360 × 640

二、浏览器的分辨率

window.screen.availWidth × window.screen.availHeight

台式机Chrome:1440 × 860 / 手机:360 × 640

设备和在设备上安装的浏览器只要不更改,它们的分辨率保持不变

在台式机设备中,浏览器分辨率的高度 = 设备分辨率的高度 - 40px;设备分辨率的宽度包含了滚动条宽度

三、窗口视口(能看到的网页区域)的宽高

window.innerWidth × window.innerHeight 

台式机Chrome:1440 × 797 / 手机:360 × 518

window.innerWidth在台式机设备中,包含滚动条宽度;window.innerHeight会随菜单和书签栏的隐藏、显示发生改变

IE8不支持这两个属性

可以把这两个属性作为响应式布局的依据(在移动设备上无滚动条)

四、文档视口的宽高

document.documentElement.clientWidth × document.documentElement.clientHeight

台式机Chrome:14401423 × 797 / 手机:360 × 518

与「窗口视口的宽高」侦测API仅一处不同:宽度是去掉滚动条宽度之后的结果;也能知道,台式机浏览器滚动条的宽度是17px

五、文档body的边框区域

document.body.offsetWidth × document.body.offsetHeight 

台式机Chrome:1403 × 1214 / 手机:340 × 1214

给大家看一下,在台式机设备中,<body>标签的盒子模型,再看显示结果就很容易理解了

“body的边框区域”不再是指“视口区域”了,它是指<body>标签所占有的网页空间,这里的有效区域是“body的content+padding+border,margin不计算在内”。以台式机设备举例

document.body.offsetWidth  = 1389 + (5 + 2) × 2 = 1403(px)

document.body.offsetHeight = 1200 + (5 + 2) × 2 = 1214(px)

六、文档body的边框内区域

document.body.clientWidth × document.body.clientHeight 

台式机Chrome:1399 × 1210 / 手机:336 × 1210

与「文档body的边框区域」侦测API就一处不同:有效区域不包含border,也就是“body的content+padding,border和margin不计算在内”。以台式机设备举例

document.body.clientWidth  = document.body.offsetWidth  - 2 × 2 = 1399 (px)

document.body.clientHeight = document.body.offsetHeight - 2 × 2 = 1210(px)

七、网页的宽高

document.documentElement.scrollWidth × document.documentElement.scrollHeight
// 或者
document.documentElement.offsetWidth × document.documentElement.offsetHeight

台式机Chrome:1399 × 1210 / 手机:336 × 1210

一个网页宽高究竟是多少(不包含滚动条),上面的结果给了你答案。它的有效区域是“body的content+padding+border+margin”,也就是body的完整盒子模型的大小。

八、不要使用document.body.scrollWidth/document.body.scrollHeight

为什么?因为Firefox和Chrome对这一属性的表现不一致!

在Firefox中,指「文档body的边框内区域」;在Chrome中,指「网页的宽高」。

私以为,Chrome的实现更好理解一些,因为margin和border也会占据网页空间的呀,滚动条不也会滚动到它们的区域吗?

(完)

 

JavaScript浏览器对象(BOM)中有关设备、浏览器屏幕高度和宽度的API介绍的更多相关文章

  1. js中浏览器对象BOM

    参考  :  https://www.cnblogs.com/Peng2014/p/4725524.html 1. window对象   https://www.runoob.com/jsref/ob ...

  2. web开发中不同设备浏览器的区分

    通常区分不同设备浏览器是用JavaScript中的navigator.userAgent.toLowerCase()方式获取浏览器的userAgent信息 //使用javascript判断是否是iPh ...

  3. javascript中获取dom元素的高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  4. js | javascript中获取dom元素的高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  5. JavaScript判断对象数组中是否存在某个对象【转】

    1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...

  6. JavaScript中将对象数组中的某个属性值,批量替换成另一个数值

    原文链接 https://segmentfault.com/q/1010000010352622 希望将下列数组中的sh替换成沪,sz替换成深 var stooges = [ {label:1,val ...

  7. javascript 从对象数组中 按字段/属性取最大值或最小值

    var array=[ { "index_id": 119, "area_id": "18335623", "name" ...

  8. android获得屏幕高度和宽度(display中getSize(Point)方法使用)

    方法一: public static int SCREEN_WIDTH; public static int SCREEN_HEIGHT; //获取屏幕 WindowManager wm = (Win ...

  9. 6、JavaScript进阶篇③——浏览器对象、Dom对象

    一.浏览器对象 1. window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,windo ...

随机推荐

  1. Libgdx 循环绘制图片时间隔的问题

    在libgdx中使用循环绘制一张图片铺满某个区域时,有可能会遇到像素计算没有问题时,图块中间还是有约1像素的间隔,或者是本来没有间隔,做了缩放处理之后发现中间有间隔. 解法 当使用Texture加载图 ...

  2. warnin php startup in unknown on line 0:

    PHP Warning:  PHP Startup:  in Unknown on line 0 这种情况是因为扩展路径有问题导致的路径或错,或没有该扩展但ini中开启了此扩展

  3. wordpress multisite functions

    The <?php echo esc_html( get_site_option( 'site_name' ) ); ?> network currently powers <?ph ...

  4. ng-selected ng-change

    <!DOCTYPE HTML><html ng-app="myApp"><head><meta http-equiv="Cont ...

  5. iOS JavaScriptCore与H5交互时出现异常提示

    在利用JavaScriptCore与H5交互时出现异常提示: This application is modifying the autolayout engine from a background ...

  6. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...

  7. visio任意角度精确旋转图形

    visio 2013 步骤: 选中图形 点击"视图->显示->任务窗格->大小和位置" 然后会出现一个小窗口,里面可以输入图形的旋转角度

  8. Java学习笔记,前两章总结

    第一章 Java平台概论 1.Java不仅仅是个程序语言,代表解决问题的平台,代表了原厂.各个厂商.社群.开发者与用户沟通的成果. 2.Java三大平台,从J2SE.J2EE.J2ME到Java SE ...

  9. Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /mydir is exceeded: quota=100000 file count=100001

    集群中遇到了文件个数超出限制的错误: 0)昨天晚上spark 任务突然抛出了异常:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: T ...

  10. JS调用OC方法并传值,OC调用JS方法并传值////////////////////////zz

     iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)     最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点 ...