- 66浏览
- 2023-01-29
效果:
代码:
<style>
.w {
width: 1000px;
margin: 0 auto;
margin-top: 10px;
}
.header {
height: 200px;
background-color: purple;
}
.banner {
height: 300px;
background-color: skyblue;
}
.main {
height: 1000px;
background-color: yellowgreen;
}
span {
display: none;
position: absolute;
bottom: 0;
}
.slider-bar {
position: absolute;
top: 400px;
left: 50%;
margin-left: 500px;
width: 30px;
height: 100px;
background-color: pink;
}
</style>
<body>
<div class="slider-bar">
<span class="goBack">返回顶部</span>
</div>
<div class="header w">头部区域</div>
<div class="banner w">banner区域</div>
<div class="main w">主体部分</div>
</body>
<script>
// 1.获取元素
var slider_bar = document.querySelector('.slider-bar');
var banner = document.querySelector('.banner');
// banner.offsetTop被卷去头部的大小,一定要写在滚动的外面
var bannerTop = banner.offsetTop;
// 侧边栏固定定位之后变化的数值
var sliderbarTop = slider_bar.offsetTop - bannerTop;
// 获取main主体元素
var main = document.querySelector('.main');
var goBack = document.querySelector('.goBack');
var mainTop = main.offsetTop;
// 2.页面滚动事件scroll
document.addEventListener('scroll', function() {
console.log(window.pageYOffset);
// 3.被卷去头部大于212时候,侧边栏改为固定定位
if (window.pageYOffset >= bannerTop) {
slider_bar.style.position = 'fixed';
slider_bar.style.top = sliderbarTop + 'px';
} else {
slider_bar.style.position = 'absolute';
slider_bar.style.top = '400px';
}
if (window.pageYOffset >= mainTop) {
goBack.style.display = 'block';
} else {
goBack.style.display = 'none';
}
});
// 点击返回顶部模块,让窗口滚动到页面最上方
goBack.addEventListener('click', function() {
// 里面的xy不加单位
//窗口滚动,对象是window
animate(window, 0);
});
//动画函数
function animate(obj, target, callback) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
// 步长值写到定时器的里面
// 把步长值改为整数,不要出现小数的问题
var step = (target - window.pageYOffset) / 10;
step = step > 0 ? Math.ceil(step) : Math.floor(step);
if (window.pageYOffset == target) {
clearInterval(obj.timer);
// 回调函数位置:定时器结束的位置
if (callback) {
// 调用函数
callback();
}
}
// 把每次步长值给为逐渐变小的值(目标值-现在位置/10)
// obj.style.left = window.pageYOffset + step + 'px';
window.scroll(0, window.pageYOffset + step);
}, 15);
}
</script>
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。