实施粘贴式导航_滚动事件

news2024/10/7 17:24:09

● 所谓的粘贴式导航,就是当我们滑动页面到某一个位置的时候,导航不会因为滑动而消失,会固定在页面的顶部,我们来看一下如何实现;
● 首先我们要获取我们想要滚动到哪一部分的时候让导航栏显示出来,这就需要我们去获取这一部分的相对于视口的一个位置信息

const section1 = document.querySelector('#section--1');
const initialCoords = section1.getBoundingClientRect();

.getBoundingClientRect(): 这是JavaScript中DOM元素上可用的方法。调用此方法会返回一个 DOMRect 对象,该对象提供了有关元素大小及其相对于视口的位置信息。
● 当我们获取了我们想要移动到那一部分位置信息时候,我们就要来是的导航显示出来,并进行准确的定位

window.addEventListener('scroll', function () {
  if (window.scrollY > initialCoords.top) nav.classList.add('sticky');
  else nav.classList.remove('sticky');
});
  1. window.addEventListener(‘scroll’, function () { … }):
    ○ 这是通过 addEventListener 方法向 window 对象添加了一个滚动事件的监听器。每当用户滚动页面时,绑定的函数就会被触发。
  2. if (window.scrollY > initialCoords.top):
    ○ window.scrollY 表示当前页面滚动的垂直距离(即滚动条距离页面顶部的距离)。
    ○ initialCoords.top 是之前通过 getBoundingClientRect() 获取到的 section1 元素顶部相对于视口的位置。
  3. nav.classList.add(‘sticky’) 和 nav.classList.remove(‘sticky’):
    ○ nav 是一个导航条(或菜单)的引用。
    ○ 如果 window.scrollY 大于 initialCoords.top,表示用户已经滚动到了 section1 元素的顶部以上,此时会给 nav 元素添加一个 sticky 类名。
    ○ 如果不满足上述条件(即用户未滚动到 section1 顶部以上),则会移除 nav 元素的 sticky 类名。
    ● 关于这个sticky类名,我们之前就写好,我们来看下它的作用
.nav.sticky {
  position: fixed;  //CSS 中的定位属性,将导航条固定在视口中的位置,不随页面滚动而移动。
  background-color: rgba(255, 255, 255, 0.95);  //透明度降低
}

这样的我们就能实现一个简单的粘性导航的效果;
在这里插入图片描述

这种实现粘性导航的方式基本上是比较简单和常见的方法,但是也存在一些潜在的缺点需要考虑:

  1. 性能问题:
    ○ 监听 scroll 事件可能会导致性能问题,特别是在页面有大量内容或者复杂的 DOM 结构时。因为每次滚动都会触发事件处理程序,可能会对页面的流畅性产生一定影响。
  2. 重复计算:
    ○ getBoundingClientRect() 方法在每次滚动时都会重新计算 section1 元素相对于视口的位置。尽管现代浏览器通常对此进行了优化,但如果页面有很多这样的计算,仍可能导致微小的性能损失。
  3. 过渡效果:
    ○ 如果希望实现粘性导航的过渡效果(如淡入淡出、滑动等),这种简单的添加/移除类名的方法可能无法满足需求。此时可能需要额外的 JavaScript 或 CSS 动画来实现更复杂的效果。
  4. 兼容性:
    ○ 虽然大多数现代浏览器都支持 getBoundingClientRect() 和 classList,但在某些较旧的浏览器或设备上可能存在兼容性问题。在这种情况下,可能需要提供备用方案或者使用 polyfill 来解决兼容性问题。
  5. 复杂布局处理:
    ○ 如果页面布局比较复杂,可能会涉及多个元素在不同滚动阶段需要切换粘性导航状态。这时候可能需要更复杂的 JavaScript 逻辑来处理不同情况下的导航行为。

下节课,我们将介绍一种更好的粘性导航的一种方案

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

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

相关文章

【后端面试题】【中间件】【NoSQL】MongoDB的优点和分片机制

为什么要用MongoDB 两个关键:灵活性和横向扩展能力 MongoDB是灵活的文档模型,也就是说,如果预计我的数据可以被一个稳定的模型来描述,会倾向于使用MySQL等关系型数据库。而一旦我认为我的数据模型会经常变动,比如我很…

斩获大奖!移远通信以高算力智能模组产品,推动工业生产智能化发展

6月27日,在2024 MWC上海期间,由通信世界全媒体主办的2024信息通信业“新智推荐”优秀企业/方案获奖名单重磅发布。 作为全球领先的物联网整体解决方案供应商,移远通信凭借其丰富的高算力智能模组产品,以及相关方案在工业智能领域的…

RK3568驱动指南|第十五篇 I2C-第167章 I2C上拉电阻

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

HTML如何在图片上添加文字

HTML如何在图片上添加文字 当我们开发一个页面,插入图片时,需要有一组文字对图片进行描述。那么HTML中如何在图片上添加文字呢?这篇文章告诉你。 先让我们来看下效果图: 句子“这是一张夜空图片”被放置在了图片的左下角。 那么…

SpringBoot整合Solr进行搜索(简单)

SpringBoot整合Solr进行搜索 创建SpringBoot项目pom中加入Solr依赖配置 Solr创建实体编写一个简单的ID查询打印结果 参考文章 创建SpringBoot项目 这里基于aliyun提供的快速构建一个项目。我们这主要是整合Solr。 pom中加入Solr依赖 maven下载地址 pom中加入以下内容&#x…

Redis分布式集群部署

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一: 实验二: 实验三: 实验四: 添加节点 自动分配槽位 提升节点为master: 实验…

如果使用Outlook 2024出现问题

大家好,才是真的好。 很多企业使用Domino服务器当作POP/IMAP邮箱服务器来使用,虽然这不能发挥Domino最佳效能,但也不失为一种简单用法。 另一种企业则使用Domino仅作为应用app平台,邮箱早已迁移至O365或其他平台,他们…

安装和微调大模型(基于LLaMA-Factory)

打开终端(在Unix或macOS上)或命令提示符/Anaconda Prompt(在Windows上)。 创建一个名为lora的虚拟环境并指定Python版本为3.9。 https://github.com/echonoshy/cgft-llm/blob/master/llama-factory/README.mdGitHub - hiyouga/…

.net8 Syncfusion生成pdf/doc/xls/ppt最新版本

新建控制台程序 添加包Syncfusion.Pdf.Net.Core包&#xff0c;当前官方的版本号为26.1.39 直接上代码 Syncfusion.Pdf.PdfDocument pdfDocument new Syncfusion.Pdf.PdfDocument(); for (int i 1; i < 10; i) {var page pdfDocument.Pages.Add();PdfGraphics graphics…

学习笔记(linux高级编程)9

void pthread_cleanup_push(void (*routine)(void *)&#xff0c; void *arg); 功能&#xff1a;注册一个线程清理函数 参数&#xff0c;routine&#xff0c;线程清理函数的入口 arg&#xff0c;清理函数的参数。 返回值&#xff0c;无 void pthread_cleanup_pop(int execute)…

Open3D 点云的旋转与平移

目录 一、概述 1.1旋转 1.2平移 二、代码实现 2.1实现旋转 2.2实现平移 2.3组合变换 三、实现效果 3.1原始点云 3.2变换后点云 一、概述 在Open3D中&#xff0c;点云的旋转和平移是通过几何变换来实现的。几何变换可以应用于点云对象&#xff0c;使其在空间中移动或旋…

navicat Lite 版

navicat Lite 版&#xff1a; Navicat 出了一个 Navicat Premium 的Lite版。 官方现在链接&#xff1a;https://www.navicat.com.cn/download/navicat-premium-lite#windows 从官网可以看到现在能够下载最新版本 17&#xff0c;支持各种平台

HSP_11章 Python面向对象编程oop_进阶部分

文章目录 P118_119 Python_封装1. 面向对象编程特征2. 封装介绍3. 封装的细节和好处4. 私有成员5. 代码演示5. 注意事项和使用细节5.1伪私有属性 P120 Python_继承快速入门1. 为什么需要继承2. 继承的基本介绍3. 继承的示意图 4. 继承的基本语法 P121 Python_继承的注意事项和细…

1.5 Canal 数据同步工具详细教程

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

面向阿克曼移动机器人(自行车模型)的LQR(最优二次型调节器)路径跟踪方法

线性二次调节器&#xff08;Linear Quadratic Regulator&#xff0c;LQR&#xff09;是针对线性系统的最优控制方法。LQR 方法标准的求解体系是在考虑到损耗尽可能小的情况下, 以尽量小的代价平衡其他状态分量。一般情况下&#xff0c;线性系统在LQR 控制方法中用状态空间方程描…

工程化:Commitlint / 规范化Git提交消息格式

一、理解Commitlint Commitlint是一个用于规范化Git提交消息格式的工具。它基于Node.js&#xff0c;通过一系列的规则来检查Git提交信息的格式&#xff0c;确保它们遵循预定义的标准。 1.1、Commitlint的核心功能 代码规则检查&#xff1a;Commitlint基于代码规则进行检查&a…

16_C语言编程基础

目录 C语言入门 程序段和代码段 C语言入门实例 英文分号(;) 注释 标识符 保留字 C中的空格 C数据类型 基本类型 sizeof获取存储字节 void类型 变量 C数组 C枚举 C中的左值(lvalue)和右值(rvalue) C常量 变量存储类型 C常用关键字(保留字) 宏定义#define co…

视频孪生助力智慧工厂:可视化安防管理与报警告警

在当今快速迭代的工业4.0时代&#xff0c;智慧工厂已成为提升生产效率、优化资源配置的关键所在。面对日益复杂的生产环境和多元化的业务需求&#xff0c;如何构建一个高效、智能且具备强大适应能力的智慧工厂也成为了众多厂商关注的焦点。为了满足工业制造的转型需求&#xff…

element el-table表格切换分页保留分页数据+限制多选数量

el-table表格并没有相关的方法来禁用表头里面的多选按钮 那么我们可以另辟蹊径&#xff0c;来实现相同的多选切换分页&#xff08;保留分页数据&#xff09; 限制多选数量的效果 <el-table:data"tableData"style"width: 100%">// 不使用el-talbe自带…

DX-11A信号继电器 0.5A 柜内板前接线 约瑟JOSEF

DX-11,11A,11B,11C型信号继电器 DX-11信号继电器 DX-11B信号继电器 DX-11A信号继电器 DX-11C信号继电器 1 用途 该继电器用于直流操作的保护线路中&#xff0c;作为信号指示器。 2 结构和原理 该继电器具有电磁铁和带公共点的三付动合触点及一个信号牌&#xff0c;为电…