javascript javascript中的“offsetLeft”和“clientLeft”有什么区别
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27199247/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
what is the difference between `offsetLeft` and 'clientLeft' in javascript
提问by Sanmveg saini
I read many answers on this website and on other sites on clientLeft
and OffsetLeft
. but none give comprehensive explanation of what those values are.
我读了这个网站和其他网站上的很多答案clientLeft
和OffsetLeft
。但没有人对这些值是什么给出全面的解释。
Also, there are several sources on the web giving confusing or incorrect information.
此外,网络上有几个来源提供了令人困惑或不正确的信息。
Can someone could give me correct explanation of these terms with an visual example?
and how could I change these values, without using any CSS. I mean using only JavaScript .
有人可以用一个直观的例子给我正确解释这些术语吗?
以及如何在不使用任何 CSS 的情况下更改这些值。我的意思是只使用 JavaScript 。
回答by Roko C. Buljan
offsetLeft
= position left
+margin
from the first positioned parentleftedge.clientLeft
= left border+ left scrollbar width(if present). (block
level elements -only!)
offsetLeft
= position left
+margin
从第一个定位的父左边缘开始。clientLeft
=左边框+左滚动条宽度(如果存在)。(block
仅限关卡元素!)
Let's say we have a <div>
with 8px border and a scrollbar
假设我们有一个<div>
8px 边框和一个滚动条
var el = document.getElementById("test");
console.log( el.offsetLeft ); // (left + margin) 80 + 10 = 90
console.log( el.clientLeft ); // (border + left scrollbar) 8 + 0 = 8
#test {
overflow: auto;
position: absolute;
left: 80px; /* + */
margin-left: 10px; /* = 90px offsetLeft */
height: 100px;
width: 100px;
border: 8px solid red;
background: #f8f8f8;
}
<div id="test">
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
</div>
The interesting part
有趣的部分
Using Right-To-Lefttext-directiondirection: rtl;
the returned value will be: border + left scrollBarwidth (usually 17px).
使用从右到左的文本方向direction: rtl;
,返回的值将是:边框 + 左滚动条宽度(通常为 17 像素)。
8px border + 17px scrollbar* = ~25px
8px 边框 + 17px 滚动条* = ~25px
* (depends on browser default or custom styles)
*(取决于浏览器默认或自定义样式)
var el = document.getElementById("test");
console.log( el.offsetLeft ); // (left + margin) 80 + 10 = 90
console.log( el.clientLeft ); // (border + left scrollbar*) 8 + ~17 = 25
#test {
overflow: auto;
position: absolute;
left: 80px; /* + */
margin-left: 10px; /* = 90px offsetLeft */
height: 100px;
width: 100px;
border: 8px solid red;
background: #f8f8f8;
direction: rtl; /* now text is `rtl` and scrollbar is at the left side! */
}
<div id="test">
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
</div>
Resources:
http://msdn.microsoft.com/en-us/library/ie/ms533564%28v=vs.85%29.aspx
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientLeft
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetLeft
资源:
http: //msdn.microsoft.com/en-us/library/ie/ms533564%28v=vs.85%29.aspx
https://developer.mozilla.org/en-US/docs/Web/API /Element.clientLeft
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetLeft
回答by AIon
The above answer explains it well, but here is a nice picture taken form this wonderful tutorial on coordinates.
上面的答案很好地解释了它,但这里有一张漂亮的图片,来自这个关于坐标的精彩教程。