简单实现元素滚动吸顶功能
实现原理:通过获取需要吸顶元素的距离顶部的高度,通过监听页面滚动事件来获取当前滚动距离,当滚动距离大于元素距离顶部高度的时候给元素添加相应的类名,进行固定定位。
<!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>
.box {
text-align: center;
color: #fff;
padding: 10px 0;
margin-bottom: 10px;
background-color: #00f;
}
.box_1 {
width: 100%;
text-align: center;
color: #fff;
padding: 10px 0;
margin-bottom: 10px;
background-color: #0f0;
}
.fixed {
position: fixed;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box_1">10</div>
<div class="box">7</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
<div class="box">8</div>
</body>
<script>
let selectDom = document.querySelector('.box_1');
let realTop = selectDom.offsetTop;
realTop += selectDom.offsetParent.offsetTop;
window.onscroll = (v) => {
let absTop = document.documentElement.scrollTop
console.log(absTop, realTop);
if (absTop > realTop) {
selectDom.classList.add("fixed")
} else {
selectDom.classList.remove("fixed")
}
}
</script>
</html>
如果元素为动态获取,要先将等元素加载完成后再获取元素高度,或者设置一个定时器延时获取高度。