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

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

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.mzph.cn/pingmian/38770.shtml

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

相关文章

Java案例抢红包

目录 一:题目要求: 二:思路分析:(遇见问题先想出完整的思路逻辑再去动手事半功倍) 三:具体代码: 一:题目要求: 二:思路分析:&#x…

Cosine 余弦相似度并行计算的数学原理与Python实现

背景 Cosine 我在LLM与RAG系列课程已经讲了很多次了,这里不在熬述,它在LLM分析中,尤其是在语义相似度的计算中至关重要,在dot attention机制中,也会看到他的身影。这里讲的是纯数学上的运算与python是如何运用相关库进…

使用 Selenium 实现自动化分页处理与信息提取

目录 项目背景与目标Selenium 环境配置分页处理的基本思路简化后的代码示例总结 正文 1. 项目背景与目标 在进行 Web 自动化测试或数据抓取时,处理分页是一个常见的需求。通过 Selenium,我们可以自动化浏览多个分页并提取每页上的信息。本文将介绍如…

JS(JavaScript)的BOM操作

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

一文汇总VSCode多光标用法

光标的创建 按住alt,鼠标左键单击,在单击位置生成光标/删除光标 按住ctrlalt,单击↑/↓,在每行同一个位置(若某一行较短,则在行尾)生成光标,这个不会删除光标,只会在光标…

Day61 代码随想录打卡|回溯算法篇---组合优化

本篇是针对上一题的优化,因为在计算所有可能的组合结果时,不是每一条路径都是我们需要遍历的,如图,当n和k都为4的时候,其实最终的结果只有一个[1,2,3,4]是符合结果的。因此我们遍历的时候就不需要遍历每一条边&#xf…

数据结构递归(01)汉诺塔经典问题

说明:使用递归时,必须要遵守两个限制条件: 递归存在限制条件,满⾜这个限制条件时,递归不再继续; 每次递归调⽤之后越来越接近这个限制条件; 1 汉诺塔(Hanoi Tower)经典…

java List接口介绍

List 是 Java 集合框架中的一个接口,它继承自 Collection 接口,代表一个有序的元素集合。List 允许重复的元素,并且可以通过索引来访问元素。Java 提供了多种 List 的实现,如 ArrayList、LinkedList、Vector 和 CopyOnWriteArrayList。 List接口概述 List 接口提供了一些…

打造未来应用:Python GUI库全景指南与实战演练

打造未来应用:Python GUI库全景指南与实战演练 引言 在软件开发领域,图形用户界面(GUI)对于提升用户体验至关重要。Python凭借其简洁的语法和强大的库支持,为GUI编程提供了丰富的选项。本文将深入探讨Python中的GUI库…

卷积层的输出

卷积层的输出 flyfish 在卷积神经网络中,卷积层的输出尺寸计算主要依赖于输入尺寸、卷积核尺寸、步幅(stride)和填充(padding)。 经典的卷积神经网络模型 - AlexNet 标准卷积 以AlexNet第一个卷积层作为说明 imp…

SpringBoot设置自动跳转前端界面

一般情况下,我们的Application启动文件的内容为一行的运行代码,默认启动项目以后不会自动跳转到我们的前端页面 public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);} 这里我的可以通过设置文件的内容&#…

【系统架构设计师】计算机组成与体系结构 ⑤ ( 主存编址计算 | 存储单元 | 内存编址 | 存储单元个数 和 总容量 计算 )

文章目录 一、主存编址计算1、存储单元2、内存编址3、存储单元个数 和 总容量 计算4、主存编址案例 一、主存编址计算 1、存储单元 存储单元 概念 : 最小存储单位 : 1 bit 是 计算机中最小的 容量单位 , 只能表示 0 或 1 ;存储单元 : 在 存储器 中 , 查找 1 bit 是比较困难的 …

c++全排列函数next_permutation详解

c全排列函数next_permutation详解 在 C 的 库中,next_permutation 是一个用于计算给定范围内元素的下一个排列的函数。这个函数特别适用于对整数序列或可以比较的元素进行全排列的生成。 参数 first, last:表示范围的迭代器,即要重新排列的…

300价值指数投资价值

300价值指数是价值股的代表。 它的选股是在沪深300指数里面按照低市盈率,低市净率,低市现率,高股息率挑选的100只股票组成。 这个指数是由中证指数公司于2008年1月21日发布,以2004年12月31日为基准,是个老牌指数了。 …

Go线程实现模型-G

G 概述 一个G就代表一个goroutine(或称Go例程),也与go函数相对应。作为编程人员,我们只是使用go语句向Go的运行时系统提交一个并发任务,而Go的运行时系统则会按照我们要求并发地执行它 Go编译器会把go语句变成对内部函数newproc的调用&…

美德政府转移比特币、以太坊引发市场下跌

小编通过链上地址监控,令人意外的发现德国和美国政府都进行了大规模的数字货币转移,转移了价值 1.5 亿美元的比特币和以太坊。这些大额转移势必引起了数字货币市场分析师和投资者的关注。 BTC价格 从今年起德国政府已转移了其持有的相当一部分比特币&…

OPPO保活方案测试

下面是OPPO手机各种方案的测试记录, 也包括无效的方案 1. OPPO的电源设置和应用省电设置 OPPO手机电源设置里面不限制性能, 优化全部关闭, "自动优化"修改成不优化 第四张图应用省电设置里面的开关也全部打开 图片不能在本地保存, 保存在文件<OPPO手机电池设置和…

【MySQL备份】Percona XtraBackup实战篇

目录 1. 前言 2.准备工作 2.1.创建备份目录 2.2.配置/etc/my.cnf文件 2.3.授予root用户BACKUP_ADMIN权限 3.全量备份 4.准备备份 5.数据恢复 6.总结 "实战演练&#xff1a;利用Percona XtraBackup执行MySQL全量备份操作详解" 1. 前言 本文将继续上篇【My…

玩Stable Diffusion不可不知的5款真人模型!大佬都在用!(附模型包)

模型对于AI绘画起决定性作用&#xff0c;今天推荐5款超好用的Stable Diffusion模型。 这些模型都在市面上收获了各种好评&#xff0c;而且各具特色&#xff0c;能满足你对写实人像的各种要求。 1、MajicMIX realisric 麦橘写实 写实系的人像大模型&#xff0c;具有非常好的质…

uboot 环境变量初始化流程

初始化在board_f.c,读取flash环境变量到ddr内在board_r.c arch/arm/cpu/armv8/start.Sbl _mainarch/arm/lib/crt0_64.S xxxxbl board_init_fxxxxb board_init_r commonboard_f.c static const init_fnc_t init_sequence_f[] {setup_mon_len,arch_cpu_init, /* basic arch c…