页面侧边栏顶部固定和底部固定方法

顶部固定用于侧边栏低于屏幕高度----左侧边栏

底部固定用于侧边栏高于屏幕高度----右侧边栏

vue页面方法 

页面布局

页面样式,因为内容比较多, 只展示主要代码

* {margin: 0;padding: 0;text-align: center;
}
.head {width: 100%;height: 88px;background-color: pinkposition: sticky;top: 0;left: 0;z-index: 999;
}
.body {display: flex;width: 1200px;margin: 0 auto;
}
.sidebar_l {width: 200px;height: 100%;background-color: bluemargin-top: 50px;position: sticky;/* 定位到导航栏下面 */top: 88px;left: 0;
}
.content {width: 600px;margin: 50px;background-color: #ccc
}
.sidebar_r {width: 300px;margin-top: 50px;/* 定位到页面底部 */bottom: 20px;
}

js

注意生命周期

onMounted(() => {// 获取元素let sidebar_r: any = document.querySelector('.sidebar_r');// 获取元素高度let r_h = sidebar_r.offsetHeight;// 获取屏幕高度var window_w = window.innerWidth;window_w < 1200 ? window_w = 1200 : window_w;sidebar_r.style.left = ((window_w - 1200) / 2) + 892 + "px";// 监听页面滚动window.addEventListener("scroll", () => {// 获取屏幕高度var window_h = window.innerHeight;// 获取滚动高度let scrollTop = window.pageYOffset || document.documentElement.scrollTop;// 判断滚动高度是否超过侧边栏高度(判断侧边栏是否滚动到了底部 侧边栏高度-屏幕高度+头部高度88+上下边距50)if (scrollTop >= r_h - window_h + 88 + 50 + 50) {sidebar_r.style.position = "fixed";} else {sidebar_r.style.position = "static";}});// 监听页面大小变化window.addEventListener("resize", () => {// 获取屏幕高度var window_w = window.innerWidth;window_w < 1200 ? window_w = 1200 : window_w;sidebar_r.style.left = ((window_w - 1200) / 2) + 892 + "px";});
})

html原生方法

需要手动计算右边侧边栏高度,可以直接复制运行看效果

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;text-align: center;}.head {width: 100%;height: 88px;background-color: pink;position: sticky;top: 0;left: 0;z-index: 999;}.body {display: flex;width: 1200px;margin: 0 auto;}.sidebar_l {width: 200px;height: 100%;background-color: blue;margin-top: 50px;position: sticky;/* 定位到导航栏下面 */top: 88px;left: 0;}.content {width: 600px;margin: 50px;background-color: #ccc;}.sidebar_r {width: 300px;margin-top: 50px;/* 定位到页面底部 */bottom: 20px;}.box1 {width: 100%;height: 600px;background-color: #0bf349;}.box2 {width: 100%;height: 6000px;background-color: #27d8f0;}.box3 {width: 100%;height: 2000px;background-color: #ed9a15;position: relative;}.bottom {position: absolute;bottom: 0;}</style>
</head><body><!-- 导航栏 --><div class="head">头部</div><!-- 内容区域 --><div class="body"><div class="sidebar_l"><div class="box1">左边侧边栏</div></div><div class="content"><!-- 内容 --><div class="box2">中间内容</div></div><div class="sidebar_r"><!-- 内容 --><div class="box3"><p>右边侧边栏</p><p class="bottom">右边侧边栏底部</p></div></div></div>
</body>
<script>// 获取元素let sidebar_r = document.querySelector('.sidebar_r');// 获取元素高度 html元素因为父元素使用了flex让子元素的高度都变成了一样高,所以获取不到真实的高度,需要手动计算赋值盒子高度,vue可以通过生命周期获取真实的元素高度// let r_h = sidebar_r.offsetHeight;let r_h = 2000;console.log("右边侧边栏高度:", r_h);// 获取屏幕高度var window_w = window.innerWidth;console.log("屏幕高度:", window_w);window_w < 1200 ? window_w = 1200 : window_w;// 这里应该891是因为滚动条宽度为8,900-9,sidebar_r.style.left = ((window_w - 1200) / 2) + 892 + "px";// 监听页面滚动window.addEventListener("scroll", () => {// 获取屏幕高度var window_h = window.innerHeight;// 获取滚动高度let scrollTop = window.pageYOffset || document.documentElement.scrollTop;// 判断滚动高度是否超过侧边栏高度(判断侧边栏是否滚动到了底部 侧边栏高度-屏幕高度+头部高度88+上下边距50)if (scrollTop >= r_h - window_h + 88) {sidebar_r.style.position = "fixed";} else {sidebar_r.style.position = "static";}});// 监听页面大小变化window.addEventListener("resize", () => {// 获取屏幕高度var window_w = window.innerWidth;window_w < 1200 ? window_w = 1200 : window_w;sidebar_r.style.left = ((window_w - 1200) / 2) + 892 + "px";});
</script></html>

计算思路:

高度判断:屏幕高度 - 元素高度 + 顶部离边框的距离

左边定位:屏幕宽度 - 左边元素宽度和间距 + 滚动条宽度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在notion里面实现四象限清单

四象限清单是一种时间管理工具&#xff0c;旨在帮助人们根据任务的重要性和紧急性来优先排序他们的工作。这个概念最早由德怀特艾森豪威尔提出&#xff0c;后来又被史蒂芬柯维在他的著作《高效能人士的七个习惯》中进一步普及。四象限清单将任务分为四个类别&#xff1a; 第一…

VueX详解

Vuex 主要应用于Vue.js中管理数据状态的一个库通过创建一个集中的数据存储&#xff0c;供程序中所有组件访问 使用场景 涉及到非父子关系的组件&#xff0c;例如兄弟关系、祖孙关系&#xff0c;甚至更远的关系组件之间的联系中大型单页应用&#xff0c;考虑如何更好地在组件外部…

洛谷 P5018 对称二叉树

题目背景 NOIP2018 普及组 T4 题目描述 一棵有点权的有根树如果满足以下条件&#xff0c;则被轩轩称为对称二叉树&#xff1a; 二叉树&#xff1b;将这棵树所有节点的左右子树交换&#xff0c;新树和原树对应位置的结构相同且点权相等。 下图中节点内的数字为权值&#xf…

window server2012 卸载iis后,远程连接黑屏

原因分析&#xff1a; 因为自己在卸载IIS的时候&#xff0c;不小心卸载了.net framework&#xff0c;系统没有了图形界面&#xff08;由完整模式Full变为了核心模式core&#xff09;&#xff0c;需要重新恢复.net framework4.5。 解决方法分析&#xff1a; 需要将核心模式co…

基于Vue移动端电影票务服务APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 Vue框架 3 1.2 数据库MongoDB 3 1.3 Axios请求 3 1.4 H5、CSS3和JavaScript 4 1.5 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 5 2.3 用户功能 6 2.4本章小结 6 3 基于Vue电影票务服务APP设计 7 3.1 页面设计 …

YOLOv9改进策略:注意力机制 |通道注意力和空间注意力CBAM | GAM超越CBAM,不计成本提高精度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;通道注意力和空间注意力CBAM&#xff0c;全新注意力GAM&#xff1a;超越CBAM&#xff0c;不计成本提高精度 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️…

Kotlin/Java中String的equals和==

Kotlin/Java中String的equals和 在Java中&#xff0c;如果定义一个常量String和new出一个String对象&#xff0c;是不同的&#xff1a; String s1 "zhang" String s2 new String("zhang") 因为在Java看来&#xff0c;s1只是一个常量&#xff0c;会放在…

Let’s Move Sui , 一起来学习吧

Let’s Move Sui是一个全新的交互式学习平台&#xff0c;通过SuiFrens的帮助教您如何在Sui上构建。设计供新手和经验丰富的开发者使用&#xff0c;Let’s Move Sui提供了一次非凡的Sui开发之旅&#xff0c;利用了Move在Sui上的独特之处&#xff0c;从基于对象的数据模型的基础知…

飞桨图像分割套件PaddleSeg初探

飞桨图像分割套件PaddleSeg初探 PaddleSeg是基于飞桨PaddlePaddle的端到端图像分割套件&#xff0c;内置45模型算法及140预训练模型&#xff0c;支持配置化驱动和API调用开发方式&#xff0c;打通数据标注、模型开发、训练、压缩、部署的全流程&#xff0c;提供语义分割、交互式…

项目性能优化—性能优化的指标、目标

项目性能优化—性能优化的指标、目标 性能优化的终极目标是什么 性能优化的目标实际上是为了更好的用户体验&#xff1a; 一般我们认为用户体验是下面的公式&#xff1a; 用户体验 产品设计&#xff08;非技术&#xff09; 系统性能 ≈ 系统性能 快 那什么样的体验叫快呢…

交换机/路由器的存储介质-华三

交换机/路由器的存储介质-华三 本文主要介绍网络设备的存储介质组成。 ROM(read-only memory&#xff0c;只读存储器) 用于存储 BootROM程序。BootROM程序是一个微缩的引导程序&#xff0c;主要任务是查找应用程序文件并引导到操作系统&#xff0c;在应用程序文件或配置文件出…

Learn OpenGL 10 Assimp+网格+模型

Assimp 一个非常流行的模型导入库是Assimp&#xff0c;它是Open Asset Import Library&#xff08;开放的资产导入库&#xff09;的缩写。Assimp能够导入很多种不同的模型文件格式&#xff08;并也能够导出部分的格式&#xff09;&#xff0c;它会将所有的模型数据加载至Assim…

WebAssembly探索篇(四)emcc和cmake编译opencv复杂案例

文章目录 开发环境工程目录CMakeLists.txtmain.cpp web端index.html效果图 遇到的问题JS与C传值Uncaught TypeError: Module._malloc is not a functioncanvas像素RGBA四通道 经验&&教训参考 最近因为项目原因&#xff0c;研究了一下WebAssembly。2015年上线与JS、HTML…

C语言——详解字符函数和字符串函数(一)

Hi,铁子们好呀&#xff01;今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下&#xff1a; 文章目录 &#x1f386;1.字符分类函数&#x1f4af;&#x1f4af;⏩1.1 什么是字符分类函数的&#xff1f;&#x1f4af;&#x1f4af;⏩1.2 字符函数的类型有哪…

基于Python的中医药知识问答系统设计与实现

[简介] 这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言&#xff0c;结合中医药领域的知识和技术&#xff0c;实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性&#xff0c;然后提出了设计思路…

【Java探索之旅】运算符解析 算术运算符,关系运算符

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、什么是运算符二、算术运算符2.1 基本四则运算&#xff08;-*/%&#xff09;2.2 增…

ThreadLocal基本原理

ThreadLocal基本原理 一、定义 ThreadLocal是java中所提供的线程本地存储机制&#xff0c;可以利用改机制将数据缓存在线程内部&#xff0c;该线程可以在任意时刻、任意方法中获取数据 二、底层原理 ThreadLocal底层是通过ThreadLocalMap来实现的&#xff0c;每个Thread对象中…

Java代码基础算法练习---2024.3.14

其实这就是从我学校的资源&#xff0c;都比较基础的算法题&#xff0c;先尽量每天都做1-2题&#xff0c;练手感。毕竟离我真正去尝试入职好的公司&#xff08;我指的就是中大厂&#xff0c;但是任重道远啊&#xff09;&#xff0c;仍有一定的时间&#xff0c;至少要等我升本之后…

安装nginx

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用nginx网站用户有&#xff1a;百度、京东、新浪、网易、腾…

Sui技术帮助Studio Mirai成功实现创意愿景

Brian和Ben Li兄弟对艺术充满热情&#xff0c;通过共同创立的研发工作室Studio Mirai&#xff0c;他们正在探索Web3技术与创意产业的交集。 Studio Mirai的第一个头像类项目&#xff08;profile picture&#xff0c;PFP&#xff09;Tamashi存在于Nozomi World中&#xff0c;这…