当前位置: 首页 > 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.dtcms.com/a/323878.html

相关文章:

  • ADK【4】内置前端调用流程
  • TDengine IDMP 快速体验(方式二 通过 docker)
  • 安全引导功能及ATF的启动过程(五)
  • Linux 虚拟机磁盘空间占满-全面清理方案
  • GoBy 工具联动 | GoBy AWVS 自动化漏扫工作流
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型对决传统方法:多语言漏洞修复能力大比拼
  • Kafka 生产者与消费者分区策略全解析:从原理到实践
  • 音视频学习(五十一):AAC编码器
  • Samba使用
  • java常见算法
  • 前端开发的奇技淫巧 --- 持续更新中
  • 《P3403 跳楼机》
  • 搭建本地 Git 服务器
  • Beelzebub靶机攻略
  • 昼夜节律修复方案(2025.08.10-08.17)
  • 基于python高校固定资产管理系统
  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • 计算机网络:(十四)传输层(下)详细讲解TCP报文段的首部格式,TCP 可靠传输的实现与TCP 的流量控制
  • 纳维 - 斯托克斯方程的存在性与光滑性:流体世界的千年谜题
  • Dify集成 Echarts 实现智能数据报表集成与展示实战详解
  • 【东枫科技】FR2/FR3 毫米波原型开发平台
  • ubuntu 安装内核模块驱动 DKMS 介绍
  • 基于Ubuntu20.04的环境,编译QT5.15.17源码
  • 瑞芯微 RK3588 平台驱动开发 学习计划
  • Ubuntu 22.04 离线环境下完整安装 Anaconda、CUDA 12.1、NVIDIA 驱动及 cuDNN 8.9.3 教程
  • 设计模式(Design Pattern)
  • vue和react和uniapp的状态管理分别是什么,并且介绍和怎么使用
  • FreeRTOS 任务与中断函数:运行机制、关键区别与使用准则
  • 如何利用RabbitMQ延迟消息优化电商支付
  • MPLS特性之PHP(Penultimate Hop Popping)