当前位置: 首页 > news >正文

JS滚动时显示元素

本篇文章我们将实现文章平滑滑入
● 其实这原本是用CSS实现的

.section {padding: 15rem 3rem;border-top: 1px solid #ddd;transition: transform 1s, opacity 1s;
}.section--hidden {opacity: 0;transform: translateY(8rem);
}

● 我们的目的呢,就是当滚入到某一节中,将section–hidden给去除就可以了
● 首先,我们先获取想要的class,存储变量中

const allSections = document.querySelectorAll('.section');

● 之后,我们定义一个函数来处理观察者监听到变化的时候,我们应该干啥,就是移除掉section–hidden这个class

const revealSection = function (entries, observer) {  //定义了一个叫做revealSection的函数,用来处理观察者(IntersectionObserver)监听到的变化。const [entry] = entries;  // 从entries数组中取出第一个元素,并赋值给entry变量if (!entry.isIntersecting) return;  //如果entry对象的isIntersecting属性为false(即元素没有进入视口),则直接返回,不执行后续操作。这个呢,是防止第一个参数,因为第一个参数会被直接定义,直接出现entry.target.classList.remove('section--hidden');  //从entry对象中获取目标元素(被观察的.section元素),然后移除它的section--hidden类名,从而使其显示出来。observer.unobserve(entry.target);  //调用观察者对象的unobserve方法停止观察当前的目标元素,因为我们只需要元素进入视口时执行一次操作。
};

● 接着呢,我们需要定义对象来监视页面上所有的section的视口变化

const sectionObserver = new IntersectionObserver(revealSection, {  //创建了一个新的IntersectionObserver对象,命名为sectionObserver,它用来监视页面上所有.section元素的可见性变化。revealSection是上面定义的处理函数,用来处理可见性变化时的具体操作。root: null,  //指定根元素为null,即使用整个视窗作为根元素,如果要基于另一个元素的可见性来触发,可以在这里指定。threshold: 0.15,  //指定触发回调的阈值,表示当.section元素的可见部分占视口的15%以上时,就触发回调函数
});

● 最后呢,我们对section元素进行迭代处理,默认情况是,这些元素是不可见的

allSections.forEach(function (section) {sectionObserver.observe(section);   //将每个.section元素注册到sectionObserver观察者中,以便监视它们的可见性变化。section.classList.add('section--hidden');  //给每个.section元素添加section--hidden类名,使它们最初隐藏起来。
});

● 完整代码如下

//揭示内容
const allSections = document.querySelectorAll('.section');
const revealSection = function (entries, observer) {const [entry] = entries;if (!entry.isIntersecting) return;entry.target.classList.remove('section--hidden');observer.unobserve(entry.target);
};const sectionObserver = new IntersectionObserver(revealSection, {root: null,threshold: 0.15,
});allSections.forEach(function (section) {sectionObserver.observe(section);section.classList.add('section--hidden');
});

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vuetify3:隐藏超出的文字
  • Python正则表达式的入门用法(上)
  • 快速上手文心一言指令:解锁AI交互新体验
  • 【linux/shell】shell中使用for循环读取数据
  • three.js利用着色器实现波浪效果
  • 新手教学系列——慎用Flask-SQLAlchemy慢日志记录
  • C++_STL---list
  • 构建现代医疗:互联网医院系统源码与电子处方小程序开发教学
  • 身边的故事(十三):阿文的故事:出现
  • js 复制文本带样式
  • Transformation(转换)开发-switch/case组件
  • 【简单讲解下npm常用命令】
  • go Channel 原理 (一)
  • 初学Spring之 IOC 控制反转
  • Git使用[推送大于100M的文件后解救办法]
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Angularjs之国际化
  • Docker下部署自己的LNMP工作环境
  • Facebook AccountKit 接入的坑点
  • JavaScript新鲜事·第5期
  • java多线程
  • js面向对象
  • mysql_config not found
  • node.js
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • WePY 在小程序性能调优上做出的探究
  • 记录一下第一次使用npm
  • 检测对象或数组
  • 精彩代码 vue.js
  • 配置 PM2 实现代码自动发布
  • 移动端唤起键盘时取消position:fixed定位
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 湖北分布式智能数据采集方法有哪些?
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • ###C语言程序设计-----C语言学习(6)#
  • #android不同版本废弃api,新api。
  • (1)(1.9) MSP (version 4.2)
  • (4) PIVOT 和 UPIVOT 的使用
  • (二)原生js案例之数码时钟计时
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (一) springboot详细介绍
  • (转)关于多人操作数据的处理策略
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)利用webkit抓取动态网页和链接
  • .describe() python_Python-Win32com-Excel
  • .env.development、.env.production、.env.staging
  • .net 调用php,php 调用.net com组件 --
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net快速开发框架源码分享
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET设计模式(11):组合模式(Composite Pattern)
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)