1、offset
(1)概述
offset就是偏移量,使用offset的相关属性可以动态地得到该元素的位置、大小等
- 获取元素距离父元素(父元素要有定位)的位置
- 获得元素的自身大小
- 返回数值不带单位
2、获取位置
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>test</title>
<style type="text/css">
.test{
height: 100px;
width: 200px;
background-color: black;
position: relative;
top:100px;
left: 200px;
}
.big{
height: 400px;
width: 400px;
background-color: #ffffcc;
margin: 0 auto;
position: absolute;
top: 100px;
left: 100px;
}
</style>
</head>
<body>
<div class="big">
<div class="test"></div>
</div>
<script>
var father=document.querySelector(".big");
var son=document.querySelector(".test");
console.log(father.offsetTop);
console.log(son.offsetLeft);
</script>
</body>
</html>

子元素以带有定位的父元素为准,如果没有父元素或者父元素没有定位则以body为准
3、获取元素的大小
<body>
<div class="big">
<div class="test"></div>
</div>
<script>
var father=document.querySelector(".big");
var son=document.querySelector(".test");
console.log(father.offsetHeight);
console.log(son.offsetWidth);
</script>
</body>

在计算元素的大小的时候是包含padding和border的
可以动态获取盒子的大小,浏览器
4、获取父元素
(1)offsetParent
<body>
<div class="big">
<div class="test"></div>
</div>
<script>
var father=document.querySelector(".big");
var son=document.querySelector(".test");
console.log(son.offsetParent);
</script>
</body>

返回父元素,父元素没有定位的话返回body
(2)parentNode
<body>
<div class="big">
<div class="test"></div>
</div>
<script>
var father=document.querySelector(".big");
var son=document.querySelector(".test");
console.log(son.parentNode);
</script>
</body>

返回的也是父元素,不管父元素有没有定位,都会返回
5、offset与style
(1)offset
- offset 可以得到任意样式表中的样式值
- offset 系列获得的数值是没有单位的
- offsetWidth 包含padding+ border + width
- offsetWidth 等属性是只读属性,只能获取不能赋值
- 我们想要获取元素大小位置,用offset更合适
(2)style
- style 只能得到行内桃式表中的样式值
- style.width 获得的是带有单位的字符串
- style.width 获得不包含padding和border的值
- style.width是可读写属性,可以获取也可以赋值
- 我们想要给元素更改值,则需要用style改变
6、获取鼠标的坐标
<body>
<div class="box"></div>
<script>
var father=document.querySelector(".box");
father.addEventListener("click",function(e){
var x=e.pageX-this.offsetLeft;
var y=e.pageY-this.offsetTop;
this.innerHTML="x:"+x+"y:"+y;
})
</script>
</body>

鼠标在浏览器内的位置减去盒子举例浏览器的举例,即为鼠标在盒子内的位置
