监听页面滚动,给页面中的节点添加动态过渡效果

news2024/10/1 9:45:07

效果示例图

在这里插入图片描述
在这里插入图片描述

示例代码

<template>
	<div class="animation-wrap">
		<!-- header-start -->
		<div class="animation-header">头部</div>
		<!-- header-end -->
		<div class="animation-subtitle animation-show">标题一</div>
		<div class="animation-content animation-show">内容一</div>
		<div class="animation-subtitle animation-show">标题二</div>
		<div class="animation-content animation-show">内容二</div>
		<div class="animation-subtitle animation-show">标题三</div>
		<div class="animation-content animation-show">内容三</div>
		<div class="animation-subtitle animation-show">标题四</div>
		<div class="animation-content animation-show">内容四</div>
		<div class="animation-subtitle animation-show">标题五</div>
		<div class="animation-content animation-show">内容五</div>
		<!-- footer-start -->
		<div class="animation-footer">底部</div>
		<!-- footer-end -->
	</div>
</template>

<script>
export default {
	data() {
		return {};
	},
	created() {},
	mounted() {
		
		/**
		 * 监听滚动条事件
		 * **/
		this.scrollHandle();
		window.addEventListener('scroll', this.scrollHandle);
	},
	methods: {
		scrollHandle() {
			//可视窗口的高度
			const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
			console.log('[可视窗口的高度]', viewPortHeight);
			//滚动条距离顶部的距离
			const scrollTop = this.getScrollTop();
			console.log('[滚动条距离顶部的距离]', scrollTop);
			const elHander = document.querySelectorAll('.animation-show');
			elHander.forEach(el => {
				const offsetTop = el.offsetTop;
				console.log('[每个节点距离顶部的距离]', offsetTop);
				//当节点距离顶部的距离-滚动条距离顶部的距离小于窗口可视高度时,说明节点已经出现在用户的视线里
				console.log('[]', offsetTop - scrollTop <= viewPortHeight);
				if (offsetTop - scrollTop <= viewPortHeight) {
					el.classList.add('current-animation');
				} else {
					el.classList.remove('current-animation');
				}
			});
		},
		/**
		 * 获取滚动条距离顶部的距离
		 * **/
		getScrollTop() {
			let scrollTop = 0;
			//documentElement:文档的文档元素
			if (document.documentElement && document.documentElement.scrollTop) {
				scrollTop = document.documentElement.scrollTop;
			} else if (document.body) {
				scrollTop = document.body.scrollTop;
			}
			return scrollTop;
		}
	}
};
</script>

<style lang="scss" scoped>
.animation-wrap {
	width: 1200px;
	margin: 0px auto;
	.animation-header {
		width: 100%;
		height: 300px;
		background-color: red;
		display: flex;
		justify-content: center;
		align-items: center;
		color: #fff;
	}
	.animation-footer {
		width: 100%;
		height: 300px;
		margin-top: 12px;
		background-color: red;
		display: flex;
		justify-content: center;
		align-items: center;
		color: #fff;
	}
	.animation-subtitle {
		width: 100%;
		height: 50px;
		display: flex;
		align-items: center;
		margin: 12px auto;
		background-color: powderblue;
		color: #fff;
		padding-left: 12px;
	}
	.animation-content {
		width: 100%;
		height: 400px;
		display: flex;
		justify-content: center;
		align-items: center;
		color: #fff;
		background-color: #dcdcdc;
	}
	.current-animation {
		animation: myfirst 2s ease;
	}
	@keyframes myfirst {
		0% {
			transform: translate(0%, 200%) scale(0);
		}
		100% {
			transform: translate(0px, 0px) scale(1);
		}
	}
}
</style>

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

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

相关文章

工人搬砖-课后程序(JAVA基础案例教程-黑马程序员编著-第八章-课后作业)

【案例8-4】 工人搬砖 【案例介绍】 1.任务描述 在某个工地&#xff0c;需要把100块砖搬运到二楼&#xff0c;现在有工人张三和李四&#xff0c;张三每次搬运3块砖&#xff0c;每趟需要10分钟&#xff0c;李四每次搬运5块砖&#xff0c;每趟需要12分钟。本案例要求编写程序分…

收集分享一些AI工具第三期(网站篇)

感谢大家对于内容的喜欢&#xff0c;目前已经来到了AI工具分享的最后一期了&#xff0c;目前为止大部分好用的AI工具都已经介绍给大家了&#xff0c;希望大家可以喜欢。 image-to-sound-fx (https://huggingface.co/spaces/fffiloni/image-to-sound-fx) 图片转换为相对应的声音…

【unity3d】unity即时战略游戏开发2 rts engine

A 背景 经过寻找发现有unity3d的[rts engine]&#xff0c;ue4的[template 4]等rts引擎/模板。 没有搜到相关教程&#xff0c;倒是有几个老外的ue从零开发长篇教程。 rts engine有几个试玩视频&#xff0c;尝试找了一下。那就不用虚幻了。 距离[原坤争霸 genshin craft]近了…

【ChatGPT整活大赏】写论文后自动生成视频

ChatGPT国内又火了一把&#xff0c;功能很强大&#xff0c;接下来就带大家感受一下它的强大之处&#xff0c;通过ChatGPT写一篇论文并自动生成视频&#xff0c;增加内容的可读性。 话不多说&#xff0c;先上成果&#xff1a; …

MySQL管理表

在创建表时需要提前了解mysql里面的数据类型 常见的数据类型 创建表 创建表方式1&#xff1a; 格式&#xff1a; CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], ………

以FGSM算法为例的对抗训练的实现(基于Pytorch)

1. 前言 深度学习虽然发展迅速,但是由于其线性的特性,受到了对抗样本的影响,很容易造成系统功能的失效。 以图像分类为例子&#xff0c;对抗样本很容易使得在测试集上精度很高的模型在对抗样本上的识别精度很低。 对抗样本指的是在合法数据上添加了特定的小的扰动&#xff0c;…

聚类算法(下):10个聚类算法的评价指标

上篇文章我们已经介绍了一些常见的聚类算法&#xff0c;下面我们将要介绍评估聚类算法的指标 1、Rand Index Rand Index&#xff08;兰德指数&#xff09;是一种衡量聚类算法性能的指标。它衡量的是聚类算法将数据点分配到聚类中的准确程度。兰德指数的范围从0到1,1的值表示两…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例&#xff0c;欢迎点赞&#xff0c;关注共同学习交流。 电影推荐系统 目录电影推荐系统1. 问题介绍1.1推荐系统矩阵分解方法介绍1.2 数据集&#xff1a;ml-100k2. 推荐系统实现2.1 定义矩阵分解函数2.2 …

什么牌子的蓝牙耳机便宜好用?四款高品质蓝牙耳机推荐

随着时代的发展&#xff0c;蓝牙耳机的使用频率越来越高&#xff0c;不少人外出时除了带手机外&#xff0c;蓝牙耳机也成为了外出必备的数码产品之一。现在的蓝牙耳机品牌众多&#xff0c;什么牌子的蓝牙耳机便宜好用&#xff1f;下面&#xff0c;我来给大家推荐四款高品质的蓝…

ZigBee组网原理详解

关键词&#xff1a;RFD FFD ZigBee 1. 组网概述 组建一个完整的zigbee网状网络包括两个步骤&#xff1a;网络初始化、节点加入网络。其中节点加入网络又包括两个步骤&#xff1a;通过与协调器连接入网和通过已有父节点入网。 ZigBee网络中的节点主要包含三个&#xff1a;终端…

一文3000字从0到1实现基于Selenium+Python的web自动化测试框架 (建议收藏)

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefo…

阿里云服务器宝塔phpstudyIIS建站

P1 建站准备工作 1.购买云服务器 &#xff08;新用户登录阿里云有阿里云服务器一个月的试用权限&#xff0c;但是试用期的云服务器有地区限制&#xff08;不可自己选择地区&#xff09;&#xff0c;我的显示的是杭州&#xff0c;内地的服务器进行域名绑定的话&#xff0c;需要…

香港新世代加密资产网红正在崛起

2023年&#xff0c;历经兴衰的加密资产&#xff0c;在元宇宙和NFT的影响下&#xff0c;越来越多人开始关注这个领域。而在香港&#xff0c;不同的人更是成为了加密资产网红&#xff0c;引起加密资产热度的提升。香港加密资产政策促进网红崛起随着加密资产在全球的兴起&#xff…

OPPO手机删除文件数据恢复技巧篇

由于各种原因&#xff0c;所有 Android 手机上的数据都可能丢失。Oppo也是一个专注于Android操作系统的智能手机品牌。因此&#xff0c;您的 Oppo 设备上的数据也容易被删除和损坏。在本文中&#xff0c;我们将讨论 Oppo 用户恢复丢失或删除数据的不同方式。我们将详细讲解OPPO…

原始GAN-pytorch-生成MNIST数据集(原理)

文章目录1. GAN 《Generative Adversarial Nets》1.1 相关概念1.2 公式理解1.3 图片理解1.4 熵、交叉熵、KL散度、JS散度1.5 其他相关&#xff08;正在补充&#xff01;&#xff09;1. GAN 《Generative Adversarial Nets》 Ian J. Goodfellow, Jean Pouget-Abadie, Yoshua Be…

string类的理解以及模拟实现

string类的理解为什么需要学习string类标准库中的string类string类简单了解string类常见接口string模拟实现深浅拷贝问题标准库下的stringVS环境下g环境下为什么需要学习string类 在C语言中&#xff0c;字符串和字符串相关的函数是分开的&#xff0c;不太符合面向对象的思想&a…

在线视频加密播放与防下载该如何考虑?

在线视频加密播放与防下载该如何考虑&#xff1f; ▲ 图 / 防录屏随机水印 1. 视频加密&#xff08;分片加密&#xff09;VRM加密&#xff1a; 将视频进行切片、对碎片逐一进行混淆式加密&#xff0c;包括AES128加密、XOR加密、关键帧错序等。 2. 防录屏&#xff08;用名信息I…

IM即时通讯开发如何解决大量离线消息导致客户端卡顿的

大部分做后端开发的朋友&#xff0c;都在开发接口。客户端或浏览器h5通过HTTP请求到我们后端的Controller接口&#xff0c;后端查数据库等返回JSON给客户端。大家都知道&#xff0c;HTTP协议有短连接、无状态、三次握手四次挥手等特点。而像游戏、实时通信等业务反而很不适合用…

一个Laravel+vue免费开源的基于RABC控制的博客系统

项目介绍 CCENOTE 是一个使用 Vue3 Laravel8 开发的前后端分离的基于RABC权限控制管理的内容管理系统&#xff0c;由于作者本人比较喜欢写作的原因&#xff0c;因此开发了这个项目&#xff0c;后端使用的PHP的Laravel框架&#xff0c;并且整理了数据层与业务层&#xff0c;相…