使用css 与 js 两种方式实现导航栏吸顶效果

2023-10-10 06:01

本文主要是介绍使用css 与 js 两种方式实现导航栏吸顶效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

position的属性我们一般认为有
position:absolute
postion: relative
position:static 
position:fixed
position:inherit;
position:initial;
position:unset;
但是我最近发现了一个定位position:sticky 这个可以称为粘性定位。
这个粘性定位的元素会始终在那个位置
 

<style>body {margin: 0;}.header {width: 100%;height: 80px;line-height: 80px;background-color: pink;text-align: center;font-size: 30px;color: #fff;}.navbar {width: 100%;height: 60px;line-height: 60px;background-color: green;text-align: center;/* 兼容 */position: -webkit-sticky;position: -ms-sticky;position: -o-sticky;/* 粘性定位*/position: sticky;left: 0;top: 0;color: #fff;}.content {height: 140px;background: rgb(13, 68, 218);margin-top: 4px;text-align: center;line-height: 140px;}
</style>
<body><div class="header">我是头部信息</div><div class="navbar" id="navbar">我是导航栏</div><div class="content"> 我是内容 </div><div class="content"> 我是内容 </div><div class="content"> 我是内容 </div><div class="content"> 我是内容 </div><div class="content"> 我是内容 </div><div class="content"> 我是内容 </div><div class="content"> 我是内容 </div>
</body>

position:sticky 的特征的(坑)

1、sticky 不会触发 BFC。如果不知道 BFC 可以看这里。
2、样式表 z-index 无效。行内 style 写有效。【这个我没有去验证过】

js检测浏览器是否支持sticky属性
if (CSS.supports("position", "sticky") || CSS.supports("position", "-webkit-sticky")) {console.log('支持')
}
使用js实现滚动效果

当滚动高度 > 元素距离顶部的位置 我们需要 { 添加类,让元素固定定位};否者移除类。
当滚动高度 > 元素距离顶部的位置 让占位元素显示在页面中。否者隐藏起来
 

<style>body {margin: 0;}.header {width: 100%;height: 100px;background-color: pink;text-align: center;line-height: 100px;}.navbar {width: 100%;height: 40px;line-height: 40px;background-color: green;text-align: center;}.position {width: 100%;height: 40px;}.fixed {position: fixed;top: 0;left: 0;}.hidecss {display: none}.content {height: 1140px;background: rgb(13, 68, 218);margin-top: 4px;text-align: center;line-height: 140px;}
</style>
<body><div class="header">头部信息栏</div><div class="navbar" id="navbar">中部导航栏</div><!-- 占位要不然滚动的时候下面的内容就会顶上去原来的位置,导致一部分内容显示不完整--><div class="position hidecss" id="position"></div><div class="content"> 我是内容 </div>
</body>
下面是js代码var navbar = document.getElementById('navbar')var position = document.getElementById('position')var navbarTop = navbar.offsetTop; // 获取导航栏到父元素的顶部距离// 监听滚动window.onscroll = function() {// 获取滚动条距离顶部的距离var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;// 滚动高度>元素距离顶部的位置时添加类,否则移除类scrollTop > navbarTop ? navbar.classList.add('fixed') : navbar.classList.remove('fixed')// 控制占位内容是否显示scrollTop > navbarTop ? position.classList.remove('hidecss') : position.classList.add('hidecss')}
分享一下上面使用 原生js——操作类名(HTML5新增classList)
classList.add( newClassName );添加新的类名,如已经存在,取消添加。
可以使用扩展运算符添加多个类。或者多个类使用逗号隔开
div.classList.add("foo", "bar", "baz"); //或者多个类使用逗号隔开
//扩展运算符添加多个类
let manyclassArr = ['leiming1', 'leiming2']
domDiv.classList.add(...manyclassArr)移除已经存在的类名;
classList.remove( oldClassName )
//移除多个类值
div.classList.remove("foo", "bar", "baz");确定元素中是否包含指定的类名,返回值为true 、false;不可以检测多个类名
classList.contains( oldClassName );如果classList中存在给定的值,删除它,否则,添加它;
classList.toggle( className );classList.replace( oldClassName,newClassName );
将oldClassName,newClassName类名替换为oldClassName,newClassName。

这篇关于使用css 与 js 两种方式实现导航栏吸顶效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/178466

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧