在javascript中获取元素得尺寸有两种方法,主要通过clientWidth和clientHeight以及offsetWidth和offsetHeight. 那么这两者有什么区别呢?
我们创建html文件,并通过以上方法获取两个属性得值,查看两者的区别:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>获取元素尺寸方法</title>
<style>
* {
padding: 0;
margin: 0;
}
div {
font-size: 50px;
line-height: 50px;
width: 100px;
height: 100px;
border: 1px solid black;
padding: 5px 0 0 0;
}
</style>
</head>
<body>
<div id="demo">你好呀</div>
<script>
function getSize(obj) {
var size = {
width: 0,
height: 0,
widthWithBorder: 0,
heightWithBorder: 0,
};
if (!obj) {
return size;
}
if (obj.offsetHeight && obj.offsetWidth) {
size.widthWithBorder = obj.offsetWidth;
size.heightWithBorder = obj.offsetHeight;
}
if (obj.clientHeight && obj.clientWidth) {
size.width = obj.clientWidth;
size.height = obj.clientHeight;
}
return size;
}
console.log(getSize(demo));
</script>
</body>
</html>
在浏览器中打开以上文件,按f12查看日志输出结果如下:
{
"width": 100,
"height": 105,
"widthWithBorder": 101,
"heightWithBorder": 106
}
那么对于上面得结果输出,我们可以得出以下结论:
- offsetWidth得大小包含了:内容区域宽度 + padding左右宽度 + border左右宽度
- offsetHeight得大小包括:内容区域高度 + padding上下宽度 + border上下宽度
- clientWidth大小包括:内容区域 + padding左右宽度
- clientHeight大小包括:内容区域 + padding上下宽度
因此他们主要区别在于包不包含border得宽度,以上就是内容全部。