第6个-滚动动画

Day 6 - Scroll Animation

1. 演示效果

QQ录屏20240213173506 -original-original

2. 分析思路

  • 布局

    所有的内容进行水平垂直居中,可以使用**margin:0 auto;,也可以使用flex**布局:

body {
	background-color: #efedd6;
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
}
  • 绑定滚动事件

    1. 滚动事件可以用事件监听addEventListener()绑定到 window 对象上(也可以绑定到document上)
    2. 触发滚动事件后,执行对应的代码函数,判断是否显示卡片
  • 判断是否显示卡片

    1. querySelectorAll()获取卡片元素,得到一个伪元素数组。
    2. forEach()方法,对每一个卡片元素判断是否显示。
    3. 显示原则:当卡片的顶部到达视图窗口的顶部的距离小于视图窗口的高度时,说明卡片到达视图窗口了,便可以显示出来。
    4. 此处用到了getBoundingClientRect()方法和Window.innerHeight属性,**MDN Web Docs**是这样解释的:

    Element.getBoundingClientRect()方法返回一个 DOMRect 对象,其提供了元素的大小及其相对于视口的位置。
    语法 > getBoundingClientRect() > 参数
    无。
    返回值
    返回值是一个 DOMRect 对象,是包含整个元素的最小矩形(包括 padding 和 border-width)。该对象使用 left、top、right、bottom、x、y、width 和 height 这几个以像素为单位的只读属性描述整个矩形的位置和大小。除了 width 和 height 以外的属性是相对于视图窗口的左上角来计算的。

img

该笔记参考自https://www.cnblogs.com/feixianxing/p/mini-web-project-scroll-animation-50-projects-50-days-GitHub-html-css-javascript-js.html

3. 代码实现

3.1. HTML

<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>第6个-滚动页面</title>
		<link rel="stylesheet" href="./style.css" />
	</head>
	<body>
		<h1>Scroll to see the animation</h1>
		<!-- 盒子的数量不限 -->
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>
		<div class="box"><h2>Content</h2></div>

		<script src="./script.js"></script>
	</body>
</html>

3.2. CSS

* {
	box-sizing: border-box;
}
/* 设置垂直水平居中 */
body {
	background-color: #efedd6;
	display: flex;
	/* 设置主轴方向从上到下 */
	flex-direction: column;
	justify-content: center;
	align-items: center;
}

/* 内容 */
.box {
	background-color: #4682b4;
	width: 400px;
	height: 200px;
	margin: 10px;
	display: flex;
	justify-content: center;
	align-items: center;
	color: #ffffff;
	font-size: 30px;
	border-radius: 10px;
	box-shadow: 2px 4px 5px rgba(0, 0, 0, 0.3);
	transform: translateX(400%);
	transition: transform 0.4s ease;
}
/* 内容为偶的左边出,奇数从右边出 */
.box:nth-of-type(even) {
	transform: translateX(-400%);
	/* 测试 */
	/* background-color: red; */
}
/* 添加show按钮后 content内容回来 */
.box.show {
	transform: translateX(0);
}

3.3. Javascript

// 获取卡片元素
const boxes = document.querySelectorAll(".box");

// 设置事件监听
window.addEventListener("scroll", checkBoxes);

// 调用函数
checkBoxes();

// 定义函数checkBoxes
function checkBoxes() {
	const triggerBottom = (window.innerHeight / 5) * 4;

	// 遍历 判断每一个卡片元素是否显示
	boxes.forEach((box) => {
		const boxTop = box.getBoundingClientRect().top;

		// 判断是否显示卡片
		// 当卡片的顶部到达视图窗口的顶部的距离小于视图窗口的高度时,
		// 说明卡片到达视图窗口了,便可以显示出来。
		if (boxTop < triggerBottom) {
			// 添加show
			box.classList.add("show");
		} else {
			// 删除粗show
			box.classList.remove("show");
		}
	});
}

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

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

相关文章

计算机服务器中了_locked勒索病毒怎么办?Encrypted勒索病毒解密数据恢复

随着网络技术的不断发展&#xff0c;数字化办公已经成为企业生产运营的根本&#xff0c;对于企业来说&#xff0c;数据至关重要&#xff0c;但网络威胁无处不在&#xff0c;近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了_locked勒索…

GPT4微信机器人部署,集成gpt4问答、midjourney以及新闻等联网功能,免费可添加机器人成为自己专属助理

GPT问答和midjourney作为AI届两大亮点&#xff0c;都各自有官方体验方式。 同时&#xff0c;也有很多大神搭建了各类软件、平台供用户体验使用。 但是如果同时将GPT问答和midjourney集合到日常最常使用的微信呢&#xff1f; 打造一个微信机器人&#xff0c;不仅自己可以随时…

Halcon 相机标定

文章目录 算子单相机标定单相机标定畸变的矫正 算子 gen_caltab 生成标定文件 gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile :) 算子来制作一个标定板XNum 每行黑色标志圆点的数量。YNum 每列黑色标志圆点的数…

自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

编程语言处理的核心是计算机如何理解和执行预定义的人工语言&#xff08;编程语言&#xff09;&#xff0c;而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代&#xff0c;其编程语言处理能力相较于前代模型有了显…

Attention Is All Your Need论文翻译

0.摘要 这个统治序列转换模型是基于复杂循环或者卷积神经网络&#xff0c;它包含编码器和解码器。表现最好的模型也通过注意力机制来连接编码器和解码器。我们提出了一个新的简单网络架构——Transformer,它仅仅是是基于注意力机制&#xff0c;完全免去递推和卷积。在两个机器…

Docker基础篇

docker 三个要素 镜像容器仓库 CentOS 6.8 安装 docker centos 7.0 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager -y --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker

『运维备忘录』之 APT 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱12(附带项目源码)

效果演示 文章目录 效果演示系列目录前言悬停显示物品详情源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将探索如何用unity制作一个3D背包、库存、制作、快…

【感知机】感知机(perceptron)学习算法的对偶形式

感知机( perceptron )是二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1 和-1二值。感知机对应输入空间(特征空间)中将实例划分为正负两类的分离超平面&#xff0c;是一种判别模型。感知机是神经网络与支持向量机的基础…

GPT-4助力我们突破思维定势

GPT-4在突破思维局限、激发灵感和促进知识交叉融合方面的作用不可小觑&#xff0c;它正逐渐成为一种有力的工具&#xff0c;助力各行业和研究领域的创新与发展。 GPT-4在突破传统思维模式、拓宽创新视野和促进跨学科知识融合方面扮演着越来越重要的角色&#xff1a; 突破思维…

【JAVA】List.addAll 详解

List.addAll() 方法是 Java 中 List 接口提供的一个用于向一个 List 集合中添加另一个 List 集合中所有元素的方法。该方法可以方便地将一个 List 集合中的元素添加到另一个 List 集合中&#xff0c;从而使得代码变得更加简洁&#xff0c;功能更加优秀。 一、使用List.addAll方…

Vue首屏优化,12个提速建议

文章目录 代码拆分和懒加载&#xff1a;代码拆分懒加载 图片优化&#xff1a;组件懒渲染&#xff1a;数据预获取和缓存&#xff1a;服务器端渲染&#xff08;SSR&#xff09;&#xff1a;代码压缩和合并&#xff1a;使用 CDN 加速&#xff1a;监控和性能分析&#xff1a;代码优…

SpringBoot+Vue项目部署上线

部署前准备 注册京东云 京东云: https://www.jdcloud.com/ 117.72.32.65vue本地部署 新建文件.env.development VUE_APP_BASEURLhttp://localhost:9191新建文件 .env.production VUE_APP_BASEURLhttp://117.72.32.65:9191main.js 设置全局变量$baseUrl Vue.prototype.$baseUrl…

《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

史上最详细《学成在线》项目实操笔记系列【下】&#xff0c;跟视频的每一P对应&#xff0c;全系列18万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 四、课程发布模块 4.1 (课程发布)模块需求…

ElementUI Form:Cascader 级联选择器

ElementUI安装与使用指南 Cascader 级联选择器 点击下载learnelementuispringboot项目源码 效果图 el-cascader.vue&#xff08;Cascader 级联选择器&#xff09;页面效果图 项目里el-cascader.vue代码 <script> let id 0; export default {name: el_cascader,dat…

MySQL数据库基础(五):SQL语言讲解

文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写&#xff0c;以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写…

数据结构-邻接矩阵

介绍 邻接矩阵&#xff0c;是表示图的一种常见方式&#xff0c;具体表现为一个记录了各顶点连接情况的呈正方形的矩阵。 假设一共有以下顶点&#xff0c;其连接关系如图所示 那么&#xff0c;怎么表示它们之间的连接关系呢&#xff1f; 我们发现&#xff0c;各条边所连接的都…

Spring学习笔记(三)--Spring中的Bean的管理

一、什么是Bean Bean是注册到Spring容器中的Java类&#xff0c;控制反转和依赖注入都是通过Bean实现的&#xff0c;任何一个Java类都可以是一个Bean。Bean由Spring进行管理&#xff0c;可以通过xml文件对bean进行配置和管理。 二、BeanFactory接口和ApplicationContext接口&a…

Java基于微信小程序的医院挂号小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

神经网络算法原理

目录 得分函数 数学表示 计算方法 损失函数 ​编辑 前向传播 反向传播 ​编辑 整体架构 正则化的作用 数据预处理 ​过拟合解决方法 得分函数 得分函数是在机器学习和自然语言处理中常用的一种函数&#xff0c;用于评估模型对输入数据的预测结果的准确性或匹配程度。…