javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > js获取盒子宽高各方法

一文彻底理清JavaScript中获取盒子宽高各方法的差异

作者:九月镇灵将

这篇文章主要介绍了JavaScript中获取盒子宽高各方法差异的相关资料,如window.outerWidth、window.screen.availWidth等,对比各属性取值原理及应用场景,强调其在检测浏览器状态时的关键作用,需要的朋友可以参考下

前言

这段时间在研究一个反爬产品,环境检测用到了很多个盒子宽高取值方法,如window.outerWidthwindow.screen.availWidth,各个方法取值结果不大相同,在此记录下遇到的方法。

教程文档:ES6 入门教程

各宽方法区别

这里就讲解下各宽度方法的区别,同样可以使用与高度方法的理解
宽度方法:outerWidthwidthinnerWidthoffsetWidthscrollWidthclientWidthavailWidth

以盒子取值区别

一般来说盒子会有widthoffsetWidthscrollWidthclientWidth这四个宽取值方法

width

offsetWidth

scrollWidth

clientWidth

具象展示

如下图,我们设置了一个width=56的按钮,其边框(border)=3、内边距(padding)=6和外边距(margin)=5,那么它的各宽方法取值结果如下

width:56
offsetWidth:74(width + padding(6*2)+ border(3*2))
scrollWidth:68(width + padding(6*2))
clientWidth:68(width + padding(6*2))

一般取值结果大小关系

在大多数情况下(不考虑滚动条和边框对内边距和内容区的影响,且内容没有溢出):

需要注意的是,当元素内容溢出时,scrollWidth的值会大于clientWidth和offsetWidth(如果滚动条可见且包含在offsetWidth中,则可能等于offsetWidth)。此外,不同浏览器对边框、内边距和滚动条的处理可能有所不同,因此在实际开发中需要注意这些差异。

以屏幕取值区别

这种取值在反爬检测中比较常见,下面列出我遇到的检测点进行讲解:

window.screen.width

window.screen.availWidth

window.innerWidth

window.outerWidth

document.body.clientWidth

具象展示

我的屏幕大小宽度是2560,下图是在开发者工具不影响宽度时它们的取值结果

当把开发者工具置于向右时它们的取值结果

当把开发者工具置于向下同时缩小浏览器窗口时它们的取值结果

通过上面的对比可以知道,一般情况下window.screen.widthwindow.screen.availWidth跟屏幕的大小有关,不会受到浏览器界面状态影响;而window.outerWidthwindow.innerWidthdocument.body.clientWidth则跟浏览器界面大小有关, 会受到浏览器界面状态影响。而这个值差就很容易被检测到,毕竟调试时一般会影响浏览器界面状态。

一般取值结果大小关系

总结 

到此这篇关于JavaScript中获取盒子宽高各方法差异的文章就介绍到这了,更多相关js获取盒子宽高各方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文