一:如何获取宽高、位置
1 获取元素宽高
offsetWidth和offsetHeight
- 获取元素自身宽高,包含元素自身内容+padding+border
- 获取可视宽高;如果盒子隐藏,获取结果为0
- 获取的是数值型数据
clientWidth和clientHeight
- 获取元素可见部分宽高(不包含边框、margin、滚动条等)
2 获取元素位置
offsetTop offsetLeft
1 如何用
- 获取元素有定位的、最近的祖先元素的顶部、以及左边距离
- 如果都没有定位的祖先元素,则以文档左上角定位为准,返回距离文档顶部以及文档左边距离
重点:offsetTop、offsetLeft为只读属性,而scrollTop、scrollLeft为读写属性;这点要重点记忆、
二:案例:顶部导航条显示与隐藏
<!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>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.content {
overflow: hidden;
width: 1000px;
height: 3000px;
background-color: pink;
margin: 0 auto;
}
.backtop {
display: none;
width: 50px;
left: 50%;
margin: 0 0 0 505px;
position: fixed;
bottom: 60px;
z-index: 100;
}
.backtop a {
height: 50px;
width: 50px;
background: url(./images/bg2.png) 0 -600px no-repeat;
opacity: 0.35;
overflow: hidden;
display: block;
text-indent: -999em;
cursor: pointer;
}
.header {
position: fixed;
top: -80px;
left: 0;
width: 100%;
height: 80px;
background-color: purple;
text-align: center;
color: #fff;
line-height: 80px;
font-size: 30px;
transition: all .3s;
}
.sk {
width: 300px;
height: 300px;
background-color: skyblue;
margin-top: 500px;
}
</style>
</head>
<body>
<div class="header">我是顶部导航栏</div>
<div class="content">
<div class="sk">秒杀模块</div>
</div>
<div class="backtop">
<img src="./images/close2.png" alt="">
<a href="javascript:;"></a>
</div>
<script>
const header = document.querySelector('.header')
const sk = document.querySelector('.sk')
window.addEventListener('scroll', function () {
const n = document.documentElement.scrollTop
header.style.top = n > sk.offsetTop ? 0 : '-80px'
}
)
</script>
</body>
</html>
利用“秒杀模块”距离页面顶部距离,以及html页面滚动距离相比较;当滚动距离相等时,就显示.header盒子,否则隐藏