更好的方法_交叉观察器API

交叉观察器(Intersection Observer)API 是一个强大的工具,可以用来检测元素是否进入视口或从视口移出。我们可以利用这个 API 来实现粘贴式导航(也称为粘性导航),即在用户滚动页面时,导航栏会在一定条件下固定在页面顶部。

● 首先我们先拿到导航元素

const header = document.querySelector('.header');

● 添加导航栏粘性效果(sticky navigation)的回调函数,用于 IntersectionObserver。这个函数在目标元素(例如一个页面顶部的占位符元素)离开视口时添加 sticky 类,当目标元素重新进入视口时移除 sticky 类。

const stickyNav = function (entries) {const [entry] = entries;if (!entry.isIntersecting) nav.classList.add('sticky');else nav.classList.remove('sticky');
};

注:isIntersecting: isIntersecting 是 IntersectionObserverEntry 接口的一个属性,用于指示观察的目标元素(target element)当前是否与其所监听的根元素(或视口)相交(intersecting)。具体来说,当目标元素(被观察的元素)的可见部分与根元素(或视口)有交集时,isIntersecting 属性为 true;当目标元素完全不可见(没有交集)时,isIntersecting 属性为 false。在 IntersectionObserver 的回调函数中,可以通过检查 isIntersecting 属性来决定何时应该执行特定的操作,例如添加或移除某个类、触发动画或加载内容等。

● 创建一个 IntersectionObserver 实例 headerObserver,用于观察页面中的页面顶部的 .header 元素与视口的交叉状态,并在交叉状态变化时调用 stickyNav 回调函数进行处理。

const headerObserver = new IntersectionObserver(stickyNav, {root: null,threshold: 0,
});

可以实现当页面顶部的 .header 元素滚动进入或离开视口时,动态地添加或移除导航栏粘性效果(sticky navigation),从而提升用户体验和页面交互性。
注:
● IntersectionObserver 是一个构造函数,它接受两个参数:一个是回调函数 stickyNav,另一个是一个配置对象。
● stickyNav 是一个在目标元素(被观察元素)的可见性变化时被调用的回调函数。这个函数通常会处理目标元素进入或离开视口时的相关逻辑。
● 配置对象包含了一些设置:
○ root:指定用作视口的根元素。在这个例子中,设置为 null 表示视口是整个浏览器视口。
○ threshold:用于定义何时触发回调函数的阈值数组。这里设置为 0 表示当目标元素的任意部分进入视口时就触发回调。

● 之后我们直接调用函数,并且将header元素作为参数传递给函数

headerObserver.observe(header);

在这里插入图片描述

● 我们也可以添加margin参数,让交叉有一定的距离,获取页面中第一个

const navHeight = nav.getBoundingClientRect().height;

● 之后将参数在函数中的配置对象中添加

const navHeight = nav.getBoundingClientRect().height;const stickyNav = function (entries) {const [entry] = entries;if (!entry.isIntersecting) nav.classList.add('sticky');else nav.classList.remove('sticky');
};const headerObserver = new IntersectionObserver(stickyNav, {root: null,threshold: 0,rootMargin: `-${navHeight}px`,
});headerObserver.observe(header);

在这里插入图片描述

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

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

相关文章

TFD那智机器人仿真离线程序文本转换为现场机器人程序

TFD式样那智机器人离线程序通过Process Simulation、DELMIA等仿真软件为载体给机器人出离线,下载下来的文本程序,现场机器人一般是无法导入及识别出来的。那么就需要TFD on Desk TFD控制器来进行转换,才能导入现场机器人读取程序。 导入的文…

MySQL4(事务、函数、慢查询和索引)

目录 一、MySQL事务 1. 概念 2. 事务的ACID原则 3. MySQL实现事务的方法 4. MySQL实现事务的步骤 5. 事务的原子性、一致性、持久性 6. 事务的隔离性 7. MySql中的锁 1. 共享锁 2. 排他锁 3. 行级锁 4. 表级锁 5. 间隙锁 6. 临键锁 7. 记录锁 8. 意向共享锁…

Python - 递归函数(Recursive Function)的速度优化 (Python实现)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140137432 免责声明:本文来源于个人知识与开源资料,仅用于学术交流,不包含任何商业技术,欢迎相互学…

余承东在母校西工大毕业典礼演讲:定位决定地位,眼界决定境界。

添加图片注释,不超过 140 字(可选) 【6月29日,西北工业大学2024届本科生毕业典礼暨学位授予仪式隆重举行。典礼上,华为常务董事、终端BG 董事长、智能汽车解决方案BU 董事长余承东作为校友代表致辞,为毕业生…

Linux_fileio实现copy文件

参考韦东山老师教程&#xff1a;https://www.bilibili.com/video/BV1kk4y117Tu?p12 目录 1. 通过read方式copy文件2. 通过mmap映射方式copy文件 1. 通过read方式copy文件 copy文件代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <…

Python知识点背诵手册,超详细知识梳理

一、手册介绍 《Python知识点背诵手册》是一份详尽的Python学习资料&#xff0c;旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能。该手册将Python的所有关键语法和概念进行了精炼的总结&#xff0c;并以易于理解和记忆的方式呈现。以下是手册的主要特点和内容概述&a…

Kafka-时间轮和延迟操作-源码流程

TimingWheel 字段&#xff1a; buckets&#xff1a;Array.tabulate[TimerTaskList]类型&#xff0c;其每一个项都对应时间轮中的一个时间格&#xff0c;用于保存 TimerTaskList的数组。在TimingWheel中&#xff0c;同一个TimerTaskList中的不同定时任务的到期时间可能 不同&a…

YOLO-world论文阅读笔记

论文&#xff1a;https://arxiv.org/abs/2401.17270 code: https://github.com/AILab-CVC/YOLO-World 1、为什么要做这个研究&#xff08;理论走向和目前缺陷&#xff09; ? 之前的开集检测器大多比较慢&#xff0c;不利于部署。 2、他们怎么做这个研究 &#xff08;方法&…

【鸿蒙学习笔记】基础组件Blank:空白填充组件

Blank&#xff1a;空白填充组件 Column({ space: 20 }) {Row() {Text(Bluetooth)Blank().color(Color.Yellow)Toggle({ type: ToggleType.Switch }).margin({ top: 14, bottom: 14, left: 6, right: 6 })}.backgroundColor(Color.Pink).borderRadius(15).padding({ left: 12 }…

数组-长度最小的子数组

M长度最小的子数组&#xff08;leetcode209&#xff09; /*** param {number} target* param {number[]} nums* return {number}*/ var minSubArrayLen function(target, nums) {const n nums.length;let ans n 1;let sum 0; // 子数组元素和let left 0; // 子数组…

2024 MWC上海:创新力量驱动未来先行,移远智慧点亮数字蓝海

6月26日&#xff0c;2024年世界移动通信大会&#xff08;MWC上海&#xff09;如期举行&#xff0c;今年的展会以“未来先行”为主题&#xff0c;涵盖“超越 5G、数智制造和人工智能经济”三大技术主题。移远通信作为全球物联网行业的引领者之一&#xff0c;今年不仅在展示内容上…

终极指南:RNNS、Transformers 和 Diffusion 模型

一、说明 作为广泛使用这些工具和模型的人&#xff0c;我的目标是解开 RNN、Transformer 和 Diffusion 模型的复杂性和细微差别&#xff0c;为您提供详细的比较&#xff0c;为您的特定需求提供正确的选择。 无论您是在构建语言翻译系统、生成高保真图像&#xff0c;还是处理时间…

RK3568平台(USB篇)USB HID设备

一.USB HID设备简介 USB HID设备主要用于和计算机进行交互通信&#xff0c;典型的USB HID类设备包括USB键盘、USB鼠标、USB游戏手柄等等&#xff0c;这些都是日常生活中常见的设备。以USB接口的鼠标为例&#xff0c;打开计算机的“设备管理器”&#xff0c;可以在“鼠标和其他…

C++ ariac2 Windows库编译

cd "F:\\aria2" gmp-6.1.2.tar.lz expat-2.2.0.tar.bz2 sqlite-autoconf-3160200.tar.gz zlib-1.2.11.tar.gz c-ares-1.12.0.tar.gz libssh2-1.8.0.tar.gz --enable-libaria2 --enable-static libgnutls-dev&#xff08;对于HTTPS&#xff0c;BitTorrent&#xff0…

【Redis7】零基础篇

1 课程概述 2 Redis入门概述 2.1 是什么 Redis是基于内存的KV键值对内存数据库 Redis&#xff1a;Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c…

阿里Nacos下载、安装(保姆篇)

文章目录 Nacos下载版本选择Nacos安装Windows常见问题解决 更多相关内容可查看 Nacos下载 Nacos官方下载地址&#xff1a;https://github.com/alibaba/nacos/releases 码云拉取&#xff08;如果国外较慢或者拉取超时可以试一下国内地址&#xff09; //国外 git clone https:…

ssh网关-sshpiper

1、环境 操作系统&#xff1a;龙蜥os 7.9 sshpiper&#xff1a;1.3.1 2、下载软件 https://github.com/tg123/sshpiper/releases 3、解压到指定目录 mkdir /opt/sshpiper tar -xvf sshpiperd_with_plugins_linux_x86_64.tar.gz -C /opt/sshpipe4、添加执行权限 chmod x /o…

[开源软件] 支持链接汇总

“Common rules: 1- If the repo is on github, the support/bug link is also on the github with issues”" label; 2- Could ask questions by email list;" 3rd party software support link Note gcc https://gcc.gnu.org openssh https://bugzilla.mindrot.o…

《昇思25天学习打卡营第9天|onereal》

继续学习昨天的 基于MindNLPMusicGen生成自己的个性化音乐 生成音乐 MusicGen支持两种生成模式&#xff1a;贪心&#xff08;greedy&#xff09;和采样&#xff08;sampling&#xff09;。在实际执行过程中&#xff0c;采样模式得到的结果要显著优于贪心模式。因此我们默认启…

K6 性能测试教程:入门介绍,环境搭建和编写第一个 K6 测试脚本

K6 性能测试教程&#xff1a;入门介绍&#xff0c;环境搭建和编写第一个 K6 测试脚本 这篇文章将带您进入 K6 性能测试的世界。博文内容涵盖了 K6 性能测试的入门知识、环境搭建步骤&#xff0c;以及如何编写您的第一个测试脚本。无论您是初学者还是有经验的性能测试专业人员&…