元素的尺寸获取
- client
- clientWidth 可视宽度 - border
- clientHeight 可视高度 - border
- clientTop 上边框宽度
- clientLeft 左边框宽度
client宽高包括内边距 padding,但不包括边框 border、外边距 margin 和垂直滚动条(如果有的话) ,其宽高盒模型如下:
clientclientTop 是一个元素顶部边框的宽度(以像素表示)。不包括顶部外边距或内边距,盒模型如下:
clientclientLeft 表示一个元素的左边框的宽度,以像素表示。如果元素的文本方向是从右向左(RTL, right-to-left),并且由于内容溢出导致左边出现了一个垂直滚动条,则该属性包括滚动条的宽度。clientLeft 不包括左外边距和左内边距上,盒模型如下:
clientWidth/clientHeight = width(height) + padding;
clientLeft/clientTop: 左边框宽度/上边框宽度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box {
margin: 50px auto;
position: relative;
width: 500px;
height: 500px;
border: 1px solid #000;
}
#div {
position: absolute;
left: 100px;
top: 100px;
margin: 50px 0 0 -100px;
width: 100px;
height: 100px;
padding: 30px;
border: 5px solid rgb(246, 250, 1);
background: red;
}
</style>
</head>
<body>
<div id="box">
<div id="div"></div>
</div>
<script>
{
let div = document.querySelector("#div");
// clientWidth/clientHeight = width(height) + padding;
console.log(div.clientWidth,div.clientHeight);
// clientLeft/clientTop: 左边框宽度/上边框宽度
console.log(div.clientLeft,div.clientTop);
}
</script>
</body>
</html>
注意:用ps测距时,截图按100%比例截取,否则可能会有误差!
- scroll
- scrollWidth 内容宽度
- scrollHeight 内容高度
- scrollLeft 左右滚动距离
- scrollTop 上下滚动距离
scrollHeight:内容高度,如果内容高度比元素高度要高,scrollHeight 就是内容,否则就是元素高度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box {
margin: 50px auto;
position: relative;
width: 300px;
height: 300px;
border: 1px solid #000;
overflow: auto;
}
#div {
width: 100px;
padding: 30px;
background: red;
}
</style>
</head>
<body>
<div id="box">
<div id="div">
元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离
</div>
</div>
<script>
{
let box = document.querySelector("#box");
console.log(box.scrollHeight);// 内容高度
}
</script>
</body>
</html>
实际高度是:内容高度加padding
小编还发现,用火狐打开的盒模型与谷歌会不同:
如果内容较少,则scrollHeight 就是元素高度。
哪怕不显示内容,即无内容,此时也为元素高度。
#div {
width: 100px;
padding: 30px;
background: red;
display:none;
}
scrollWidth 元素的内容宽度,如果内容宽度小于box宽度,就是box宽度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box {
margin: 50px auto;
position: relative;
width: 300px;
height: 300px;
border: 1px solid #000;
overflow: auto;
}
#div {
width: 100px;
padding: 30px;
background: red;
}
</style>
</head>
<body>
<div id="box">
<div id="div">
元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离
</div>
</div>
<script>
{
let box = document.querySelector("#box");
console.log(box.scrollHeight);
console.log(box.scrollWidth);
}
</script>
</body>
</html>
去除滚动条,显示正常300,因此计算时会把滚动条算在之外。
#box {
margin: 50px auto;
position: relative;
width: 300px;
height: 300px;
border: 1px solid #000;
overflow: hidden;
}
scrollLeft 左右滚动距离
scrollTop 上下滚动距离
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box {
margin: 50px auto;
position: relative;
width: 300px;
height: 300px;
border: 1px solid #000;
overflow: auto;
}
#div {
width: 400px;
/* width: 100px; */
padding: 30px;
background: red;
}
</style>
</head>
<body>
<div id="box">
<div id="div">
元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离元素左侧距离可视区左侧距离
</div>
</div>
<script>
{
let box = document.querySelector("#box");
setInterval(()=>{
console.log("上下位置:" + box.scrollTop);
console.log("左右位置:" + box.scrollLeft);
},3000);
}
</script>
</body>
</html>
滚轮常用事件:onscroll滚动条发生滚动时的事件
let box = document.querySelector("#box");
box.onscroll = function(){ // 滚动条发生滚动时的事件
console.log(box.scrollTop);
};
(后续待补充)