当前位置:网站首页>在线直播源码,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动态效果之,侧边栏滚动固定效果, 更多内容欢迎关注之后的文章
边栏推荐
- How to write a software test report? Here comes the third party performance report template
- leetcode:714. 买卖股票的最佳时机含手续费【dp双状态】
- Unity C # e-learning (11) -- custom protocol generation tool
- TFTLCD display experiment of mini plate based on punctual atom stm32
- 领歌leangoo敏捷看板工具新增导出卡片文档和粘贴共享脑图节点功能
- 2022年6月对自己近况的一次总结
- Understanding and learning of parental delegation mechanism
- Staggered and permutation combination formula
- 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?
- @Transactional失效的几种场景
猜你喜欢

【小程序实战系列】电商平台源码及功能实现

Pychart shares third-party modules among different projects

leetcode:714. 买卖股票的最佳时机含手续费【dp双状态】

Adder - Notes

02 MongoDB数据类型、重要概念以及shell常用指令

From zero to one, I will teach you to build a "search by text and map" search service (I)

AS 3744.1标准中提及ISO8191测试,两者测试一样吗?

How to apply for ASTM E108 flame retardant test for photovoltaic panels?

Detailed explanation of KVM common commands

MySQL master-slave replication, separation and resolution
随机推荐
Simple factory mode
05 mongodb summary of various column operations
How to apply for ASTM E108 flame retardant test for photovoltaic panels?
What is the level 3 password complexity of ISO? How often is it replaced?
Multi project design and development · introduction to class library project
指针链表
2021 year end summary and 2022 outlook
AspNetCoreRateLimit 速率限制 接口访问限制 限流控制
Two methods of shell script parameter passing based on arm5718
Pointer linked list
MSC 307(88) (2010 FTPC Code) Part 5低播焰测试
27年,微软IE结束了!
云厂商为什么都在冲这个KPI?
GO语言-select语句
Conversion between decimal and BCD codes in C language
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?
利用ELK 搭建日志分析系统(二)—— 部署安装
Tiktok actual battle ~ take off the blogger
品达通用权限系统(Day 5~Day 6)
ambari SSLError: Failed to connect. Please check openssl library versions.