zoukankan      html  css  js  c++  java
  • JS中各种宽度距离小结

    js中获取各种宽度和距离,常常让我们混淆,各种浏览器的不兼容让我们很头疼,现在就在说说js中有哪些宽度和距离。

    1、名词解释

    • screen:屏幕。这一类取到的是关于屏幕的宽度和距离,与浏览器无关,应该是获取window对象的属性。
    • client:使用区、客户区。指的是客户区,当然是指浏览器区域。
    • offset:偏移。指的是目标甲相对目标乙的距离。
    • scroll:卷轴、卷动。指的是包含滚动条的的属性。
    • inner:内部。指的是内部部分,不含滚动条。
    • avail:可用的。可用区域,不含滚动条,易与inner混淆。

    2、window

    2.1、window.innerWidth/innerHeight

    描述:浏览器可见区域的内宽度、高度(不含浏览器的边框,但包含滚动条)。

    兼容:ie9/10、chrome、firefox。

    示例(缩放浏览器的宽度为1000px,高度为500px):

    alert(window.innerWidth);
    // chrome/firefox/ie9/10=>1000
    // ie6/7/8=>undefined
    alert(window.innerHeight);
    // chrome/firefox/ie9/10=>500
    // ie6/7/8=>undefined

    2.2、window.outerWidth/outerHeight

    描述:浏览器外宽度(包含浏览器的边框,因各个浏览器的边框边一样,得到的值也是不一样的)。

    兼容:ie9/10、chrome、firefox。

    示例(缩放浏览器的宽度为1000px,高度为500px):

    alert(window.outerWidth);
    // chrome/firefox/ie9/10=>1002
    // ie6/7/8=>undefined
    alert(window.outerHeight);
    // chrome/firefox/ie9/10=>502
    // ie6/7/8=>undefined

    注意:没有window.width属性。

    2.3、window.screenLeft/screenTop

    描述:浏览器的位移,表示:

    • ie浏览器的内边缘距离屏幕边缘的距离。
    • chrome浏览器的外边缘距离屏幕边缘的距离。

    如图:

    兼容:ie6/7/8/9/10、chrome。

    示例:

    1. alert(window.screenLeft);
    2. // ie=>87
    3. // chrome=>86
    4. // firefox=>undefined
    5. alert(window.screenTop);
    6. // ie=>87
    7. // chrome=>86
    8. // firefox=>undefined

    2.4、window.screenX/screenY

    描述:浏览器的位移,表示:

    • ie9/10浏览器的外边缘距离屏幕边缘的距离。
    • chrome浏览器的外边缘距离屏幕边缘的距离。

    由此可知,chrome的screenLeft和screenX是相等的(其目的是为了兼容ie和firefox,两个属性都兼备了,但更趋向于firefox,chrome的这种做法不止这一处,还有很多,其实这种做法便于开发者移植,但对开发者的开发过程产生了一定的混淆),ie9/10的screenLeft是大于screenX的,如图:

    【图】

    兼容:ie9/10、chrome、firefox。

    示例:

    1. alert(window.screenX);
    2. // chrome/firefox=>86
    3. // ie9/10=>79
    4. // ie6/7/8=>undefined
    5. alert(window.screenY);
    6. // chrome/firefox=>86
    7. // ie9/10=>79
    8. // ie6/7/8=>undefined

    2.5、window.pageXOffset/pageYOffset

    描述:表示浏览器X轴(水平)、Y轴(垂直)滚动条的偏移距离。

    兼容:ie9/10、chrome、firefox。

    示例:

    1. document.onclick=function(){
    2. alert(window.pageXOffset);
    3. // chrome=>200
    4. // firefox=>200
    5. // ie9/10=>200
    6. // ie6/7/8=>undefined
    7. alert(window.pageYOffset);
    8. // chrome=>200
    9. // firefox=>200
    10. // ie9/10=>200
    11. // ie6/7/8=>undefined
    12. };

    2.6、window.scrollX/scrollY

    描述:表示浏览器X轴(水平)、Y轴(垂直)滚动条的偏移距离。由此可知,在chrome和firefox中window.pageXOffset和window.scrollX是相等的,具体为什么会出现两个相等的属性值,不得而知。

    兼容:chrome、firefox。

    示例:

    1. document.onclick=function(){
    2. alert(window.scrollX);
    3. // chrome=>200
    4. // firefox=>200
    5. // ie6/7/8/9/10=>undefined
    6. alert(window.scrollY);
    7. // chrome=>200
    8. // firefox=>200
    9. // ie6/7/8/9/10=>undefined
    10. };

    3、screen

    3.1、screen.width/height

    描述:屏幕的宽度、高度(指的是屏幕的分辨率,单位为像素)。

    兼容性:ie6/7/8/9/10、chrome、firefox。

    示例(屏幕的分辨率为1440×900):

    1. alert(screen.width);
    2. // chrome/firefox/ie6/7/8/9/10=>1440
    3. alert(screen.height);
    4. // chrome/firefox/ie6/7/8/9/10=>900

    注意:此处必须是screen.width,而不是screenWidth,与接下来要说的各种宽度有所区别。

    3.2、screen.availWidth/availHeight

    描述:屏幕的可用宽度、高度(通常与屏幕的宽度、高度一致)。

    兼容性:ie6/7/8/9/10、chrome、firefox。

    示例:

    1. alert(screen.availWidth);
    2. // chrome/firefox/ie6/7/8/9/10=>1440
    3. alert(screen.availHeight);
    4. // chrome/firefox/ie6/7/8/9/10=>900

    4、element

    元素的宽度、位移、距离以元素的盒模型为content-box为例。即:

    1. box-sizing: content-box;

    其他盒模型计算会有差异,请勿对号入座。

    4.1、elment.clientWidth/clientHeight

    描述:计算如下,

    • 有滚动条时:clientWidth=元素左内边距宽度+元素宽度+元素右内边距宽度-元素垂直滚动条宽度
    • 无滚动条时:clientWidth=元素左内边距宽度+元素宽度+元素右内边距宽度

    使用该特性可以计算出的滚动条宽度(即设置元素的内容宽度超过元素宽度,然后分别设置是否超过隐藏,两次的clientWidth差值就是滚动条的宽度)。

    兼容:chrome、firefox、ie6/7/8/9/10。

    示例(宽度和高度都为100px,边框为50px,内边距为60px,外边距为70px,左、上位移为80px,滚动条的宽度因系统不同而不同):

    1. // 有滚动条=>paddingLeftWidth+width+paddingRightWidth-scrollYWidth
    2. // 无滚动条=>paddingLeftWidth+width+paddingRightWidth
    3. alert(oDemo.clientWidth);
    4. // 有滚动条=>60+100+60-17=203
    5. // 无滚动条=>60+100+60=220
    6. // 有滚动条=>paddingTopWidth+height+paddingBottomWidth-scrollYHeight
    7. // 无滚动条=>paddingTopWidth+height+paddingBottomWidth
    8. alert(oDemo.clientHeight);
    9. // 有滚动条=>60+100+60-17=203
    10. // 无滚动条=>60+100+60=220

    4.2、element.clientLeft/clientTop

    描述:clientLeft为左边框宽度,clientTop为上边框宽度。

    兼容:chrome、firefox、ie6/7/8/9/10。

    示例(宽度和高度都为100px,边框为50px,内边距为60px,外边距为70px,左、上位移为80px,滚动条的宽度因系统不同而不同):

    1. // borderLeftWidth
    2. alert(oDemo.clientLeft);
    3. // =>50
    4. // borderTopWidth
    5. alert(oDemo.clientTop);
    6. // =>50

    4.3、element.offsetWidth/offsetHeight

    描述:offsetWidth=元素左边框宽度+元素左内边距宽度+元素宽度+元素右内边距宽度+元素右边框宽度。

    兼容:chrome、firefox、ie6/7/8/9/10。

    示例(宽度和高度都为100px,边框为50px,内边距为60px,外边距为70px,左、上位移为80px,滚动条的宽度因系统不同而不同):

    1. // borderLeftWidth+paddingLeftWidth+width+paddingRightWidth+borderRightWidth
    2. alert(oDemo.offsetWidth);
    3. // =>50+60+100+60+50=320
    4. // borderTopWidth+paddingLeftWidth+width+paddingRightWidth+borderRightWidth
    5. alert(oDemo.offsetWidth);
    6. // =>50+60+100+60+50=320

    4.4、element.offsetLeft/offsetTop

    描述:表示该元素相对于最近的定位祖先元素的距离,

    chrome:offsetLeft=定位祖先左边框宽度+定位祖先元素左内边距宽度+左位移+左外边距宽度

    ie6/7/8/9/10、firefox:offsetLeft=定位祖先元素左内边距宽度+左位移+左外边距宽度。

    chrome比其他浏览器多计算了定位祖先元素的边框。offsetTop同理。

    兼容:chrome、firefox、ie6/7/8/9/10。

    示例(宽度和高度都为100px,边框为50px,内边距为60px,外边距为70px,左、上位移为80px,滚动条的宽度因系统不同而不同):

    1. // 以最近的定位祖先元素为准
    2. // 谷歌=>parentBorderLeftWidth+parentPaddingLeftWidth+left+marginLeft
    3. // 其他=>parentPaddingLeftWidth+left+marginLeft
    4. alert(oDemo.offsetLeft);
    5. // chrome=>20+10+80+70=180
    6. // ie6/7/8/9/10/firefox=>160
    7. // 以最近的定位祖先元素为准
    8. // 谷歌=>parentBorderTopWidth+parentPaddingTopWidth+left+marginLeft
    9. // 其他=>parentBorderTopWidth+left+marginLeft
    10. alert(oDemo.offsetLeft);
    11. // chrome=>20+10+80+70=180
    12. // ie6/7/8/9/10/firefox=>160

    4.5、element.scrollWidth/scrollHeight

    描述:计算方法如,

    • 有滚动条时:
      • chrome、firefox、ie8/9/10:左内边距宽度+内容宽度。
      • ie6/7:左内边距宽度+内容宽度+右内边距宽度(是由CSS的BUG引起)。
    • 无滚动条时:左内边距宽度+宽度+右内边距宽度。

    兼容:chrome、firefox、ie8/9/10、ie6/7(半兼容)。

    示例(宽度和高度都为100px,边框为50px,内边距为60px,外边距为70px,左、上位移为80px,滚动条的宽度因系统不同而不同,内容宽度和高度都为200px):

    1. // 有滚动条=paddingLeftWidth+contentWidth
    2. // 有滚动条(ie6/7)=paddingLeftWidth+contentWidth+paddingRightWidth
    3. // 无滚动条=paddingLeftWidth+width+paddingRightWidth
    4. alert(oDemo.scrollWidth);
    5. // 有滚动条=>200+60=260
    6. // 有滚动条(ie6/7)=>200+60+60=320
    7. // 无滚动条=>100+60+60=220
    8. // 有滚动条=paddingTopWidth+contentWidth
    9. // 有滚动条(ie6/7)=paddingTopWidth+contentWidth+paddingBottomWidth
    10. // 无滚动条=paddingTopWidth+width+paddingBottomWidth
    11. alert(oDemo.scrollHeight);
    12. // 有滚动条=>60+200=260
    13. // 有滚动条(ie6/7)=>60+200+60=320
    14. // 无滚动条=>60+100+60=220

    4.6、element.scrollLeft/scrollTop

    描述:获得水平、垂直滚动条的距离。

    兼容:chrome、firefox、ie6/7/8/9/10。

    示例(宽度和高度都为100px,边框为50px,内边距为60px,外边距为70px,左、上位移为80px,滚动条的宽度因系统不同而不同):

    
    
    1. document.onclick=function(){
    2. // 水平滚动条左距离
    3. alert(oDemo.scrollLeft);
    4. // 垂直滚动条上距离
    5. alert(oDemo.scrollTop);
    6. }

    5、总结

    因为document.documentElement就是浏览器的html标签,所以获取浏览器的相关属性,也可以用该对象来获取。

    屏幕宽度:window.screen.width。

    浏览器内宽度:window.innerWidth || document.documentElement.clientWidth。

    元素内容宽度:element.clientWidth。

    元素占位宽度:element.offsetWidth。

    元素相对位置:无。

  • 相关阅读:
    Atitit.struts2体系结构大总结
    Atitit.hibernate体系结构大总结
    Atitit. 最佳实践 QA----降低cpu占有率--cpu占用太高怎么办
    Atitit.软件GUI按钮与仪表盘(01)--js区-----js格式化的使用
    Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal ntsc
    Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode
    Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008
    Atitit.软件GUI按钮与仪表盘(01)--报警系统--
    Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
    Atitit.软件仪表盘(0)--软件的子系统体系说明
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/10770056.html
Copyright © 2011-2022 走看看