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

news2024/10/6 20:32:03

交叉观察器(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.coloradmin.cn/o/1887210.html

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

相关文章

简单分享 for循环,从基础到高级

1. 基础篇:Hello, For Loop! 想象一下,你想给班上的每位同学发送“Hello!”,怎么办?那就是for循环啦, eg:首先有个名字的列表,for循环取出,分别打印 names ["Alice", …

从零开始实现大语言模型(一):概述

1. 前言 大家好,我是何睿智。我现在在做大语言模型相关工作,我用业余时间写一个专栏,给大家讲讲如何从零开始实现大语言模型。 从零开始实现大语言模型是了解其原理及领域大语言模型实现路径的最好方法,没有之一。已有研究证明&…

服务器BMC基础知识总结

前言 因为对硬件方面不太理解,所以打算先从服务器开始学习,也想和大家一起分享一下,有什么不对的地方可以纠正一下哦!谢谢啦!互相学习共同成长~ 1.BMC是什么? 官方解释:BMC全名Baseboard Mana…

java面试课程-SpringIOC部分源码解析

1.SpringIOC的refresh源码解析 核心: 核心使用的是: 需要完成配置类的解析,各种BeanFactoryProcessor的注册。还有写国际化配置的初始化。Web容器的内部构造。 上面几个方法是refresh方法的内容。注意可以与applicationContext里的内容一起…

【Linux从入门到放弃】探究进程如何退出以进程等待的前因后果

🧑‍💻作者: 情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 进…

编写动态库

1.创建库.c .h文件 2.编写Makefile文件 3.make之后形成.so文件 4.make output,形成mylib 5.把mylib拷贝到test里面 mv mylib /test 6.编译 gcc main.c -I mylib/include -L mylib/lib -lmymethod形成a.out 但是直接执行会出现以下问题 很显然没有找到动态库 7.解决加载找不…

FIO压测磁盘性能以及需要注意的问题

一、压测类型 1、顺序读(IO):read,bs1M,job数从1开始往上加:2、3、4... 2、顺序写(IO):write,bs1M,job数从1开始往上加:2、3、4... …

基于索尼基于索尼Spresense的眼睛跟随平台中两个模型的对比

1.模型一(现在使用的) 这个模型是一个简单的神经网络,由三个主要组件组成:输入层、一个全连接层(Affine层)、一个Sigmoid激活函数层和一个Binary Cross Entropy损失层。 以下是每个组件的说明: Input 层:这…

2024 COMMUNITY DAY User Group 社区嘉年华 云计算与 AI 技术交融盛会共筑多元智慧未来

亚马逊云科技User Group,深圳 Community Day 活动流程抢先知道! ⏰ 7月7日 🏠 深圳南山区香港中文大学 📣主论坛国际大咖云集,共襄科技盛宴! 🎉三大主题论坛:人工智能、大数据、动…

heic格式转化jpg,手把手教你将heic转换成jpg【办公必备】

一、什么是heic heic格式是一种高效的图片格式,它可以在较小的文件大小下提供高质量的图片。 二、如何打开heic 然而,这种图片因其格式的特殊性,在实际应用中仍存在一些问题:压缩效果可能不够理想,一些老旧的软件和设…

无线领夹麦克风品牌排名更新,手机直播麦克风前十排名!

在自媒体时代,音频设备尤其是麦克风的重要性日益凸显。技术的革新带来了麦克风品类的多样化,满足了从传统录制到现代自媒体创作的广泛需求。音频质量是决定视频作品能否吸引并留住观众的关键因素。在众多麦克风品牌中,挑选一款性能卓越的产品…

一切为了安全丨2024中国应急(消防)品牌巡展武汉站成功召开!

消防品牌巡展武汉站 6月28日,由中国安全产业协会指导,中国安全产业协会应急创新分会、应急救援产业网联合主办,湖北消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-武汉站成功举办。该巡展旨在展示中国应急(消防&am…

【软件测试】单元测试、系统测试、集成测试详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法…

cesium 聚合

cesium 聚合(下面附有源码) 示例代码 <html lang="en"><head><!-- Use correct character set. -->

AI工具哪里找?这个ai导航网站绝对是你不可错过的宝藏

这两年来&#xff0c;人工智能技术飞速发展并且已经渗透到我们生活的方方面面&#xff0c;从简单的日常任务到复杂的专业领域&#xff0c;AI工具的应用越来越广泛。 无论是办公一族还是设计师&#xff0c;教师等&#xff0c;都开始利用AI&#xff0c;提高自己的工作效率。 如…

QChartView显示实时更新的温度曲线图(动态曲线图)

文章目录 参考图1. 项目结构2. CMakeLists.txt3. main.cpp4. TemperatureSeries.qml5. main.qml6. 说明参考博客参考图 要在Qt QML中使用QChartView显示实时更新的温度曲线图,我们需要使用Qt Charts模块和一些QML组件。下面是一个完整的示例代码,以及详细说明每个部分的作用。…

代码生成器使用指南,JeecgBoot低代码平台

JeecgBoot 提供强大的代码生成器&#xff0c;让前后端代码一键生成&#xff0c;实现低代码开发。支持单表、树列表、一对多、一对一等数据模型&#xff0c;增删改查功能一键生成&#xff0c;菜单配置直接使用。 同时提供强大模板机制&#xff0c;支持自定义模板&#xff0c;目…

基于Canvas的Html5多时区动态时钟实战

目录 前言 一、关于Canvas技术 1、Canvas是什么 2、Canvas的属性及渲染特性 二、Canvas动态多时区展示 1、新建html页面 2、创建Canvas对象 3、绘制所有的时钟 总结 前言 出差旅行相信大家一定会住酒店&#xff0c;大家在酒店的前台进行预订的时候&#xff0c;是不是都…

简单实现Anaconda/Miniforge虚拟环境的克隆和迁移

简单实现Anaconda/Miniforge虚拟环境的克隆和迁移 一、问题描述一、方式一&#xff1a;使用命令克隆二、方式二&#xff1a;直接复制粘贴 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 使用Anaconda…

【Node-RED 4.0.2】4.0版本新增特性(官方版)

二、重要功能 *1.时间戳格式改进 过去&#xff0c;node-red 只提供了 最原始的 timestamp 的格式&#xff08;1970-01-01 ~ now&#xff09; 但是现在&#xff0c;额外增加了 2 种格式&#xff1a; ISO 8601 -A COMMON FORMAT&#xff08;YYYY-MM-DDTHH:mm:ss:sssZ&#xff…