js获取视口

split      2022-02-13     616

关键词:

js提供了大量的属性来描述窗口尺寸,但是在不同的浏览器中,存在着一些细节差异,本文用来记录这些容易忘记的小细节

目前只测试了chrome,firefox,ie8,9,10,11(使用ie11的仿真模式)

标准模式 PC端 屏幕尺寸1920*1080 全屏浏览器测试 格式 宽 / 高

浏览器/属性 inner documentElement.client body.client
i8 undefined / undefined 1899 / 961 3000 /3500
i9+ 1920 / 982 1903 /965 3000 /3500
chrome 1920 / 974 1903 / 957 3000 / 3500
firefox 1920 / 974 1903 / 957 3000 / 3500

从图上可以看出,innerWidth是很适用的,除了ie8及其以下版本不支持外,所有的浏览器都能返回正确的视口值

innerHeight在ie9+以上的浏览器中比其他浏览器多了8px,这是因为IE9+的浏览器头部高度为58px,而其他两款浏览器的头部高度为66px,比ie多占用了8px导致的,所以该值也是普遍适用的。

在ie9+以上,和其他的浏览器中,documentElement.cilentWidth,height,比起inner少了17px,因为滚动条占居17px

而在ie8中,该值比在ie9+的浏览器中还少了4px,目前不知道原因

在没有滚动的方向上,两者值是相同的,如果需要统一包含或者不包含滚动条,可以在这两种值中,加上或者减去17px,就能保持一致

body.clientWidth明显是不行的,无论在那个版本中,该属性值保存的是body元素的尺寸,当然如果视口与body一样大的话,也可以使用该值

总结:inner可以视为是包含滚动条尺寸的视口,documentElement.client可以视为不包含滚动条尺寸的视口,两者在存在滚动条的方向上相差17px

除此之外没有区别

要注意的是由于ie浏览器的头部高度比其他浏览器矮了8px,所以在视口的高度上比其他浏览器多了8px,所以IE看上去比较高。</>

body.client不能拿来判断视口尺寸。

 


混杂模式 PC端 屏幕尺寸1920*1080 全屏浏览器测试 格式 宽 / 高

浏览器/属性 inner documentElement.client body.client
i8 undefined / undefined 1899 / 961 3000 /3500
i9 1920 / 982 1903 /965 3000 /3500
i10+ 1920 / 982 1903 /965 1903 /965
chrome 1920 / 974 1903 / 3500 1903 / 957
firefox 1920 / 974 1903 / 3500 1903 / 957

混杂模式下,inner系列的表现和标准模式下一致,ie8仍然不支持,ie9+以上的浏览器仍然高了8px

混杂模式下的ie8,ie9与标准模式下的ie8,ie9的三个值完全一致,但是从ie10+开始,body.client就不一样了,ie10+的浏览器中的body.client,和其他两个属性相同,不再代表body元素的尺寸

所以,在混杂模式下,ie10+的浏览器,你可以任意使用,因为三者的值都是相同的

chrome和firefox中的body.client也不再代表body元素的尺寸,也可以使用

docuementElement.clientHeight也跟着抽风了,在混杂模式下该height代表body元素的height

总结:不要开启混杂模式

js获取浏览器中的各种宽高值

width:clientWidth:对象实际内容的宽度,不包含边线,最大不超过视口宽度 offsetWidth:对象实际宽度,包含边线,最大不超过视口宽度 scrollWidth:对象实际宽度,不包含边线,可超过视口宽度height:(都可超过视口高度)c... 查看详情

使用 ExtJS-4X 或 javascript 获取视口高度

】使用ExtJS-4X或javascript获取视口高度【英文标题】:GettingviewportheightusingExtJS-4Xorjavascript【发布时间】:2013-02-0608:10:53【问题描述】:我想使用ExtJs或原生javascript获取视口的高度。我怎样才能得到这个高度?我没有使用任何extjs视... 查看详情

js获取鼠标当前的位置

  有时候,我们需要得到窗口拖动或者鼠标移动的距离,此时可以通过计算鼠标前后在页面中的位置来得到想要的结果,下面介绍几个事件属性:1、客户区坐标位置  鼠标事件都是在浏览器视口中的特定位置上发生的。这个... 查看详情

使用 jQuery 获取视口大小

】使用jQuery获取视口大小【英文标题】:UsingjQueryToGetSizeofViewport【发布时间】:2011-03-0322:35:30【问题描述】:如何使用jQuery来确定浏览器视口的大小,并在调整页面大小时重新检测到这一点?我需要在这个空间中设置一个IFRAME大... 查看详情

text获取视口尺寸(代码片段)

查看详情

获取视口两侧的纬度和经度

】获取视口两侧的纬度和经度【英文标题】:Getlatitudeandlongitudeoftheviewport\'ssides【发布时间】:2013-01-1120:15:08【问题描述】:可能重复:getcurrentlatlngbounds?我正在寻找使用Google地图API获取地图视口的纬度和经度的最佳方式。理想... 查看详情

QGraphicsView:如何高效获取QGraphicsItems的视口坐标?

】QGraphicsView:如何高效获取QGraphicsItems的视口坐标?【英文标题】:QGraphicsView:HowtoefficientlygettheviewportcoordinatesofQGraphicsItems?【发布时间】:2012-02-0701:03:54【问题描述】:有没有一种快速的方法来获取QGraphicsView中QGraphicsItems的视口... 查看详情

如何在javascript中获取鼠标相对于窗口视口的位置?

】如何在javascript中获取鼠标相对于窗口视口的位置?【英文标题】:Howtogetthemousepositionrelativetothewindowviewportinjavascript?【发布时间】:2013-01-2023:24:15【问题描述】:event.pageY获取相对于整个文档高度的鼠标位置(我假设为document.do... 查看详情

从 geoJSON 获取地图视口中存在的要素

】从geoJSON获取地图视口中存在的要素【英文标题】:GetfeaturespresentinmapviewportfromgeoJSON【发布时间】:2017-06-0512:21:41【问题描述】:我需要在地图上为我拥有的数据添加标记。在思考过程中,我浏览了map.data.loadGeoJson(\'google.json\');... 查看详情

获取视口java语言中的所有元素

...能(在javascript或jquery中但没有任何插件)在当前视口中获取所有元素(例如表行tr)而无需遍历每个元素?我发现了很多示例,这些示例如何检查指定元素是否在当前视口中,但是我需要的是一个函数返回当前视口中所有元素的... 查看详情

javascript获取浏览器视口宽度和高度(代码片段)

查看详情

javascript在视口#js中(代码片段)

查看详情

javascript在视口#js中(代码片段)

查看详情

zepto.js:视口和延迟加载插件?

】zepto.js:视口和延迟加载插件?【英文标题】:zepto.js:ViewportandLazyloadplugins?【发布时间】:2012-07-0320:00:53【问题描述】:我曾经使用jQuery并且正在使用jQueryLazyLoadPluginhttp://www.appelsiini.net/projects/lazyloadjQueryViewportPluginhttp://www.appels... 查看详情

如何在特定视口上设置触摸手势/hammer.js 处于活动状态?

】如何在特定视口上设置触摸手势/hammer.js处于活动状态?【英文标题】:Howtosettouchgestures/hammer.jsactiveonaspecificviewport?【发布时间】:2018-10-0916:59:09【问题描述】:我刚刚为我正在构建的网站构建了带有触摸事件的轮播滑块。目... 查看详情

获取浏览器视口的宽度和高度,无论内容大小如何且不调整为 100%?

】获取浏览器视口的宽度和高度,无论内容大小如何且不调整为100%?【英文标题】:Getthebrowserviewportwidthandheightnomatterthesizeofthecontentsandwithoutsizingto100%?【发布时间】:2020-03-3117:52:57【问题描述】:有没有办法在不将正文宽度和高... 查看详情

Ext JS 5 - 将网格面板添加到视口

】ExtJS5-将网格面板添加到视口【英文标题】:ExtJS5-addgridpaneltoviewport【发布时间】:2015-02-2116:23:40【问题描述】:我正在寻找一种将网格面板添加到我的视口的方法,我尝试使用add()函数,但这对我不起作用。Ext.应用程序(名称... 查看详情

unity3d获取相机视口四个角的坐标

功能:如标题所示,主要考虑用来做3dPlane的自适应屏幕 ///<summary>///获取指定距离下相机视口四个角的坐标///</summary>///<paramname="cam"></param>///<paramname="distance">相对于相机的距离</param>///<returns& 查看详情