当前位置: 首页 > news >正文

滚动条开始滚动时,左侧导航固定,当左侧内容触底到footer时左侧内容取消固定并跟随滚动条滚动

页面上当滚动条滚动时,需要左侧内容固定不动,但是当内容触底到footer时,我们不希望左侧内容压在footer上,视觉上不好看,这时候需要左侧内容取消固定,滚动条在这个范围滚动时,需要左侧内容一直出现在footer上方,直到滚动条滚动超出footer范围,左侧导航继续固定不动。

计算方法:

第一步:计算左侧导航高度,给左侧导航设置fixed属性

第二步:根据(文档的总高度 - 文档内部可见区域的高度 - 元素顶部不可见部分的高度),获取到的高度如果大于footer的总高度,就去除fixed属性,设置absolute属性

        <div class="header bg">header</div><div class="wrapper"><div class="left-box"><div id="left-id" class="bgleft scrollfixed">左侧内容</div></div><div class="content-box bg">content主要内容</div></div><div class="page-footer bg">footer</div>
       .header{height: 100px;margin-bottom: 20px;}.wrapper{display: flex;}.bg{background-color: #2d343c;padding: 20px;border-radius: 5px;color: #fff;}.bgleft{background-color: #29ad9b;padding: 20px;border-radius: 5px;color: #fff;}.left-box{width: 240px;position: relative;}.scrollfixed{position: fixed;}#left-id{width: 200px;height: 600px;}.content-box{height: 2000px;margin: 0 20px;flex: 1;}.right-box{width: 200px;height: 300px;}.page-footer{margin: 20px 0;height: 400px;}.scrollabsolute{position: absolute;bottom: 0;}
window.addEventListener('scroll', function(){const targetTop = $('#left-id').offset().top;const targetBottom = targetTop + $('#left-id').height();const containerTop = $('.page-footer').offset().top;const containerBottom = containerTop - $('.page-footer').height();if (targetBottom - containerTop > 0) {$('#left-id').addClass("scrollabsolute");} const element = document.documentElement; // 获取html文档const scrollHeight = element.scrollHeight; // 文档的总高度const clientHeight = element.clientHeight; // 文档内部可见区域的高度const scrollTop = element.scrollTop; // 元素顶部不可见部分的高度// 计算剩余滚动条距离const remainingScroll = scrollHeight - clientHeight - scrollTop;if(remainingScroll > 440){$('#left-id').removeClass("scrollabsolute")}});

http://www.lryc.cn/news/616409.html

相关文章:

  • Vue3入门到精通:2.4 Vue3动态组件与异步组件深度解析
  • 【Redis】持久化方案——RDB和AOF
  • RK3588在YOLO12(seg/pose/obb)推理任务中的加速方法
  • Kafka消费者相关原理
  • 纳维 - 斯托克斯方程的存在性与光滑性:流体世界的千年谜题
  • Python训练营打卡DAY 26 函数专题1:函数定义与参数
  • 大模型工具集成四层架构:识别、协议、执行与实现
  • JS中typeof与instanceof的区别
  • 专题三_二分_二分查找
  • 单片机捷径
  • Shell脚本-了解i++和++i
  • Linux常用命令(后端开发版)
  • NVIDIA Jetson AGX Orin 全景解析——边缘计算的高性能选择
  • 6A 工作流:让 Cursor、Trae 等AI编程助手按流程交付的实战手册
  • 机器学习——多元线性回归
  • React Profiler
  • HarmonyOS NEXT系列之编译三方C/C++库
  • 【Jenkins入门以及安装】
  • 《动手学深度学习》读书笔记—10.4 Bahdanau注意力
  • 移动端音频处理实践:59MB变声应用的技术实现分析
  • MySQL中的in和exists的区别
  • C++多线程服务器
  • Spring循环依赖详解
  • MySQL面试题及详细答案 155道(041-060)
  • LeeCode 46. 全排列
  • 冒泡排序实现以及优化
  • 20250810 | 深度学习入门笔记1
  • 大型动作模型LAM:让企业重复任务实现80%效率提升的AI技术架构与实现方案
  • 五种 IO 模型与阻塞 IO
  • 数组中的第K个最大元素