offsetclientscroll区别

Posted yang1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了offsetclientscroll区别相关的知识,希望对你有一定的参考价值。

offset

一句话:除了 margin 我们都要。

offsetWidth & offsetHeight

offsetWidth = cssWidth + padding + border;

offsetHeight = cssHeight + padding + border;

注意:如果将元素的box-sizing设置为border-box,offsetWidth 就等于 cssWidth。

举个例子:

#wrapper{
    width:100px;
    height:100px;
    padding:10px;
    margin:4px;
    border:1px solid red;
}
<div id=wrapper></div>

输出的结果:

wrappers offsetHeight:122px
wrappers offsetWidth:122px

offsetLeft & offsetTop

offsetLeft & offsetTop = 相对祖先元素(position 不为 static 的元素)的偏移量;

举个例子:

wrapper 未设置 position

#wrapper{
    width:100px;
    height:100px;
    padding:10px;
    margin:4px;
    border:1px solid red;
}
#content{
    width:50px;
    height:50px;
    padding:5px;
    margin:3px;
    border:1px solid red;
}
<div id=wrapper>
    <div id="content"></div>
</div>

输出的结果:

wrappers offsetLeft:4px
wrappers offsetTop:4px
contents offsetLeft:18px(相对于 html 的偏移量)
contents offsetTop:18px

将wrapper 的 position 设置为 relative

#wrapper{
    width:100px;
    height:100px;
    padding:10px;
    margin:4px;
    border:1px solid red;
    position:relative;
}

输出结果

contents offsetLeft:13px(相对于 warpper 元素的偏移量)
contents offsetTop:13px

client

一句话:等于 offset 去掉 border 和滚动条。

clientWidth & clientHeight

offset 减去 border 和滚动条的宽度就等于 client。

clientWidth = offsetWidth - border - scrollBar;
clientHeight = offsetHeight - border - scrollBar;

clientLeft & clientTop

没有(左侧/顶部)滚动条时,clientLeft 与 clientTop 等于 border 的宽度,有(左侧/顶部)滚动条时,等于 border 的宽度 + 滚动条的宽度。

特殊情况

当我们在获取<html>元素(document. documentElement)尺寸的时候,client 给出的是 viewport 的尺寸,即浏览器的可视区域尺寸,而 offset 给出的是<html>元素的尺寸,例如:浏览器宽度是 1920px,当修改<html>元素的宽度为 10% 时,document. documentElement.clientWidth 为 1920,document. documentElement.offsetWidth 为 192。

 

scroll

scrollWidth & scrollHeight

scrollWidth = clientWidth + 溢出内容尺寸;
scrollHeight = clientHeight + 溢出内容尺寸;

 

scrollTop & scrollLeft

scrollTop:这个元素的顶部到视口可见内容的顶部的距离,当一个元素的内容没有产生垂直方向的滚动条,那么 scrollTop 为 0,scrollLeft 同理。

除了上述的方法外,还有 getComputedStyle 和 getBoundingClientRect 两个方法能获取到详细的尺寸。

 

Method

getComputedStyle()

getComputedStyle() 获取的是元素 css 定义的属性,css 中是什么就返回什么,举个例子:

#wrapper{
    width:100px;
    height:100px;
    padding:10px;
    margin:4px;
    border:1px solid red;
}
console.log(document.querySelector(#wrapper).getComputedStyle().width)

输出的结果:250px

getBoundingClientRect()

getBoundingClientRect() 获取的是元素的位置信息:left、right、top、bottom 以及 width、height。

返回的 width = offsetWidth,height = offsetHeight。

以上是关于offsetclientscroll区别的主要内容,如果未能解决你的问题,请参考以下文章

这两个代码片段有啥区别?

这两个代码片段之间有区别吗?如果有,那又如何? [复制]

jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段

字符串插值和片段之间有啥显着区别吗?

jacript var let const 区别

Python snippet(代码片段)