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

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

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.mfbz.cn/a/762952.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端工程化09-webpack静态的模块化打包工具(未完结)

9.1、开发模式的进化历史 webpacks是一个非常非常的强大的一个工具,相应的这个东西的学习也是有一定的难度的,里边的东西非常的多,里面涉及到的 概念的话也是非常非常的多的。 这个东西既然非常重要,那么在我们前端到底处于怎样…

填志愿选专业,文科男生如何选专业?

又到了高考分数出炉,无数学子收获喜悦的季节,在分数刚出炉时,很多学生表现的异常兴奋,于他们而言,这么多年的努力终于有了收获,自己该考虑选择什么专业了。而毫不夸张的说,很多人在拿到专业目录…

前程无忧滑块

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …

使用机器学习,轻松预测问题产品,低成本高效率解决产品质量监测需求

01、案例说明 这个案例是一个酒厂,通过对其产品中不同化学性质的指标数值,寻找哪些是可能出现问题的产品。这是一个标准的离异点(Outlier)使用情形。 如果能够将在不同属性的一定范围之内的数据,作为判断的标准&#…

JS(JavaScript)的BOM操作

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

C语言实现简单的minishell

探索开源项目:MiniShell 引言 在计算机编程的世界里,Shell 是一个至关重要的组成部分,它允许用户与操作系统交互,执行命令和程序。MiniShell 是一个简化版的 Shell 程序,通常用于教学和学习目的。在本文中&#xff0…

印尼火出圈的本土网盟okspin助力slot游戏广告代投策略

印尼火出圈的本土网盟okspin助力slot游戏广告代投策略 在当今日益全球化的数字营销环境中,本土网盟广告平台在推广特定地区的产品和服务方面发挥着至关重要的作用。特别是在印尼这样的多元文化市场中,本土网盟okspin投放印尼slots游戏广告的优势尤为显著…

汽车零部件材料耐候性测试氙光太阳辐射系统试验箱

概述 汽车零部件等领域的材料耐候性测试是一项关键的质量控制环节,它关乎汽车部件在各种气候条件下的性能表现和寿命。塑料件光照老化实验箱,即氙灯老化试验箱,在其中扮演着至关重要的角色。通过模拟自然环境中的光照、温度、湿度等条件&…

顺序表(C语言详细版)

1. 线性表 线性表(lina list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...... 线性表在逻辑上是线性结构,也就是说连续的一条直线。但是在物理结构上并…

开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538

开源一个基于IP6557和IP6538芯片的205W升降压快充模块(140W65W),其中一路C口支持PD3.1协议,最高输出28V5A,另一路是A口C口,最高输出65W(20V3.25A),可搭配一个24V10A的开关…

Ubuntu20.04 安装 cudatookit 12.2 + cudnn 安装

最简约的部署Ubuntu20.04深度学习环境的教程 1. 安装Ubuntu20.04 系统 B站详细的安装教程 简约安装版 2. 安装Nvidia显卡驱动 我参考了各种资料,重装系统,完美解决开机显示器黑屏无法进入桌面的情况 黑屏问题主要是由linux内核更新导致,…

混合注意力机制 -- Convolutional Block Attention Module(CBAM)

CBAM CBAM 模块概述 通道注意力模块(Channel Attention Mechanism)和空间注意力模块(Spatial Attention Mechanism)是注意力机制的两种主要形式,它们分别通过对通道维度和空间维度的特征图进行加权,从而使…

算法金 | Transformer,一个神奇的算法模型!!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在现代自然语言处理(NLP)领域,Transformer 模型的出现带来了革命性的变…

每日一题-验证回文串

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” //验证回文串 #include<vector> class Solution { public:bool reverseString(char s) {return (s > a && s < z) ||(s > 0 && s < 9) ||(s…

Lesson 43 Hurry up!

Lesson 43 Hurry up! 词汇 of course 当然【口语】 经常出现在口语交际中&#xff1a; Of course not. 当然不。 同义词&#xff1a; Certainly 当然。 Certainly not. 当然不。 注意语气&#xff1a;略带挑衅。Sure. 当然。 Sure not. 当然不。 Not sure. 不一定。 kettle…

Pandas 学习笔记(一)

一、pandas简介 Pandas 是 Python 语言的一个扩展程序库&#xff0c;用于数据分析。 Pandas 名字衍生自术语 "panel data"&#xff08;面板数据&#xff09;和 "Python data analysis"&#xff08;Python 数据分析&#xff09;。 Pandas 是一个开放源码…

Python + OpenCV 酷游地址教学V鄋KWK3589

本篇文章汇整了一系列的Python OpenCV 教学&#xff0c;只要按照教学文的顺序阅读和实作&#xff0c;就可以轻松入门OpenCV&#xff0c;并透过OpenCV 实现许多影像相关的创意应用。 接下来我们来介绍OpenCV-- OpenCV 是一个跨平台的电脑视觉函式库( 模组) &#xff0c;可应用…

CesiumJS【Basic】- #042 绘制纹理线(Primitive方式)

文章目录 绘制纹理线(Primitive方式)1 目标2 代码2.1 main.ts3 资源文件绘制纹理线(Primitive方式) 1 目标 使用Primitive方式绘制纹理线 2 代码 2.1 main.ts var start = Cesium.Cartesian3

SSM泰华超市商品管理系统-计算机毕业设计源码11946

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 3.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

一键把二次元老婆拉进现实(Stable Diffusion进阶:ControlNet LineArt模型)

大家好我是极客菌&#xff01;&#xff01;&#xff01; 操作&#xff0c;就能将二次元老婆拉进现实&#xff0c;成为你的专属女友。本文将带你深入了解ControlNet LineArt模型的使用方法&#xff0c;助你轻松实现这一梦想。 ControlNet LineArt模型是Stable Diffusion的最新…