当前位置:网站首页>在线直播源码,JS动态效果之,侧边栏滚动固定效果
在线直播源码,JS动态效果之,侧边栏滚动固定效果
2022-06-28 03:44:00 【云豹网络科技】
在线直播源码,JS动态效果之,侧边栏滚动固定效果
结构代码:
<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>
样式代码:
.slider-bar {
position: absolute;
left: 50%;
top: 300px;
margin-left: 600px;
width: 45px;
height: 130px;
background-color: pink;
}
.w {
width: 1200px;
margin: 10px auto;
}
.header {
height: 150px;
background-color: purple;
}
.banner {
height: 250px;
background-color: skyblue;
}
.main {
height: 1000px;
background-color: yellowgreen;
}
span {
display: none;
position: absolute;
bottom: 0;
}
JS代码:
// 获取元素
var sliderbar = document.querySelector('.slider-bar');
var banner = document.querySelector('.banner');
var bannerTop = banner.offsetTop; // 获取主体部分距离顶部的距离
var sliderbarTop = sliderbar.offsetTop - bannerTop; // 看上图我们发现侧边栏是固定banner部分右边的,因此我们要用两个值相减获取banner顶着浏览器页面最上方的时候,侧边栏距离浏览器最上方的值。
document.addEventListener('scroll', function() {
// 给【页面】添加一个滚动事件,我们事件的对象时页面的滚动。
if (window.pageYOffset >= bannerTop) {
// 浏览器滚动上方被遮盖住的部分大于bannerTop,也就是说banenr上方以及没有东西了,再或者说header部分完全被滚动走了。
sliderbar.style.position = 'fixed';
sliderbar.style.top = sliderbarTop + 'px';
} else {
sliderbar.style.position = 'absolute'; // 如果没有滚动走,那就让侧边栏还随着页面的滚动而滚动
sliderbar.style.top = 300 + 'px'; // 元素起初的位置
}
if (window.pageYOffset >= mainTop) {
goBack.style.display = 'block'; // 如果banner部分被滚动走了,那就让侧边栏内容给显示出来
} else {
goBack.style.display = 'none'; // 否则不显示
}
// 3. 当我们点击了返回顶部模块,就让窗口滚动的页面的最上方
goBack.addEventListener('click', function() {
// 里面的x和y 不跟单位的 直接写数字即可
// window.scroll(0, 0);
// 因为是窗口滚动 所以对象是window
animate(window, 0);
});
// 动画函数
function animate(obj, target, callback) {
// console.log(callback); callback = function() {} 调用的时候 callback()
// 先清除以前的定时器,只保留当前的一个定时器执行
clearInterval(obj.timer);
obj.timer = setInterval(function() {
// 步长值写到定时器的里面
// 把我们步长值改为整数 不要出现小数的问题
// var step = Math.ceil((target - obj.offsetLeft) / 10);
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();
// }
callback && callback();
}
// 把每次加1 这个步长值改为一个慢慢变小的值 步长公式:(目标值 - 现在的位置) / 10
// obj.style.left = window.pageYOffset + step + 'px';
window.scroll(0, window.pageYOffset + step);
}, 15);
}
})
var main = document.querySelector('.main');
var mainTop = main.offsetTop;
var goBack = document.querySelector('.goBack');
以上就是在线直播源码,JS动态效果之,侧边栏滚动固定效果, 更多内容欢迎关注之后的文章
边栏推荐
- leetcode:714. The best time to buy and sell stocks includes handling fee [DP dual status]
- Introversion, lying flat and midlife crisis
- Meichuang was selected into the list of "2022 CCIA top 50 Chinese network security competitiveness"
- 05 mongodb summary of various column operations
- A summary of my recent situation in June 2022
- MSc 307 (88) (2010 FTPC code) Part 2 smoke and toxicity test
- 关于 SY8120I 的DC-DC的降压芯片的学习(12V降至3.3V)
- 04 summary of various query operations and aggregation operations of mongodb
- Supplementary questions of monthly competition
- PostgreSQL 实现批量更新、删除、插入
猜你喜欢
抖音实战~关注博主
Secouer le son et se battre ~ prêter attention au blogueur
02 MongoDB数据类型、重要概念以及shell常用指令
领歌leangoo敏捷看板工具新增导出卡片文档和粘贴共享脑图节点功能
Detailed explanation of KVM common commands
视频爆炸时代,谁在支撑视频生态网高速运行?
Several important physical concepts
机器学习入门笔记
The company leader said that if the personal code exceeds 10 bugs, he will be dismissed. What is the experience?
Staggered and permutation combination formula
随机推荐
TFTLCD display experiment of mini plate based on punctual atom stm32
僅用遞歸函數和棧操作逆序一個棧
@Several scenarios of transactional failure
软件测试报告怎么编写?第三方性能报告范文模板来了
从零到一,教你搭建「以文搜图」搜索服务(一)
MSc 307 (88) (2010 FTPC code) Part 9 bedding test
How to apply for ASTM E108 flame retardant test for photovoltaic panels?
Visualization of loss using tensorboard
@Transactional失效的几种场景
利用ELK 搭建日志分析系统(二)—— 部署安装
La norme européenne en 597 - 1 pour les meubles est - elle la même que les deux normes en 597 - 2 pour les ignifuges?
A summary of my recent situation in June 2022
[MySQL] multi table connection query
Understanding and learning of parental delegation mechanism
《性能之巅第2版》阅读笔记(二)--CPU监测
02 mongodb data types, important concepts and common shell instructions
RT-Thread 双向链表(学习笔记)
GO语言-select语句
抖音实战~取关博主
GenICam GenTL 标准 ver1.5(2)