WHAT - CSS Animationtion 动画系列(一)

ops/2024/9/20 3:56:25/ 标签: css, 前端

目录

  • 一、介绍
  • 二、animation-name
  • 三、animation-duration
  • 四、animation-timing-function
    • 4.1 介绍
    • 4.2 具体实践:抛物线
  • 五、animation-delay
  • 六、animation-iteration-count
  • 七、animation-direction
  • 八、animation-fill-mode
  • 九、animation-play-state

今天我们主要学习和掌握 css animation 基本概念和使用。

一、介绍

CSS animation 是一种使用 CSS 规则来创建动画效果的技术。通过在 CSS 中定义关键帧和动画属性,可以实现元素在页面上的平滑过渡、旋转、缩放等动态效果。

css">/* @keyframes duration | easing-function | delay |
iteration-count | direction | fill-mode | play-state | name */
animation: 3s ease-in 1s 2 reverse both paused slidein;/* @keyframes duration | easing-function | delay | name */
animation: 3s linear 1s slidein;/* two animations */
animation:3s linear slidein,3s ease-out 5s slideout;

CSS animation 主要涉及以下几个具体属性:

  1. animation-name: 定义动画的名称,通常与 @keyframes 规则中定义的关键帧名称相匹配。
  2. animation-duration: 定义动画持续的时间。
  3. animation-timing-function: 定义动画的时间函数,控制动画的速度变化。
  4. animation-delay: 定义动画开始之前的延迟时间。
  5. animation-iteration-count: 定义动画的循环次数。
  6. animation-direction: 定义动画播放时的方向,比如正向、反向或者交替播放。
  7. animation-fill-mode: 定义动画执行前和执行后元素样式的状态。
  8. animation-play-state: 定义动画的播放状态,比如暂停或播放。
  9. animation: 上述属性的简写形式,用于一次性定义所有动画属性。

通过这些属性的组合,可以创建各种各样的动画效果。

二、animation-name

官方文档

  • 取值: 关键帧名称或者 none
  • 解释: 定义动画的名称,通常与 @keyframes 规则中定义的关键帧名称相匹配。如果设置为 none,则表示没有动画效果。
css">@keyframes slide {from {transform: translateX(0);}to {transform: translateX(100px);}
}
.element {animation-name: slide;
}

三、animation-duration

官方文档

  • 取值: 时间值,如 2s, 200ms
  • 解释: 定义动画持续的时间,指示动画完成一次循环所需的时间长度。
css">@keyframes slide {0% {transform: translateX(-100%);}100% {transform: translateX(0);}
}
.element {width: 100px;height: 100px;background-color: blue;animation-name: slide;animation-duration: 2s;
}

四、animation-timing-function

4.1 介绍

官方文档

  • 取值: ease, linear, ease-in, ease-out, ease-in-out, steps(n, start), steps(n, end), cubic-bezier(n,n,n,n)
  • 解释: 定义动画的时间函数,控制动画的速度变化,也可以说它控制了动画在时间上的变化速度。
css">@keyframes slide {0% {transform: translateX(-100%);}100% {transform: translateX(0);}
}.element {width: 100px;height: 100px;background-color: blue;animation-name: slide;animation-duration: 2s;animation-timing-function: ease-in-out;
}

在官方示例可以更清晰的看到它们的动画效果区别:

请添加图片描述

其中 cubic-bezier 是一种自定义时间函数,它通过四个数值来定义贝塞尔曲线,从而描述动画的加速度。这四个数值通常是介于 0 和 1 之间的,表示曲线上的控制点。下图是 https://cubic-bezier.com 官方给出的示例:

请添加图片描述

  • 第一个数值代表贝塞尔曲线的第一个控制点的 x 轴坐标。
  • 第二个数值代表贝塞尔曲线的第一个控制点的 y 轴坐标。
  • 第三个数值代表贝塞尔曲线的第二个控制点的 x 轴坐标。
  • 第四个数值代表贝塞尔曲线的第二个控制点的 y 轴坐标。

这个函数的输出值表示时间 t 对应的位置,通常在 0 和 1 之间,其中 0 表示动画开始时,1 表示动画结束时。贝塞尔曲线可以让动画在时间轴上产生加速、减速、匀速或者任意自定义的速度变化。

一个常见的例子是 cubic-bezier(0.25, 0.1, 0.25, 1),它定义了一个类似于 ease 的时间函数,使动画在开始时稍微缓慢,然后加速,并在接近结束时再次缓慢。

自定义的贝塞尔曲线可以通过在线工具或者编辑器来生成,以满足特定动画效果的需求。

4.2 具体实践:抛物线

要实现抛物线效果,以下是一个简单的示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Parabolic Motion</title>
<style>css">.ball {width: 50px;height: 50px;background-color: red;position: absolute;border-radius: 50%;animation: horizontalMove 2s linear forwards, verticalMove 2s cubic-bezier(.74,.2,.95,.47) forwards;}@keyframes horizontalMove {0% {left: 0;}100% {left: 200px;}}@keyframes verticalMove {0% {top: 0;}100% {top: 200px;}}
</style>
</head>
<body><div class="ball"></div>
</body>
</html>

在这个示例中,我们为 .ball 元素同时附加了两个动画,分别是 horizontalMoveverticalMovehorizontalMove 实现了水平方向的匀速移动,而 verticalMove 实现了垂直方向的按重力加速度移动。

五、animation-delay

官方文档

  • 取值: 时间值,如 2s, 200ms
  • 解释: 定义动画开始之前的延迟时间,指示动画在元素加载后多久开始执行。
css">.element {animation-delay: 1s;
}

六、animation-iteration-count

官方文档

  • 取值: infinite, 数字值
  • 解释: 定义动画的循环次数,指示动画应该循环播放多少次。infinite 表示无限循环。
css">.element {animation-iteration-count: infinite;
}

七、animation-direction

官方文档

  • 取值: normal, reverse, alternate, alternate-reverse
  • 解释: 定义动画播放时的方向,比如正向、反向或者交替播放。
css">.element {animation-direction: alternate;
}

八、animation-fill-mode

官方文档

  • 取值: none, forwards, backwards, both
  • 解释: 定义动画执行前和执行后元素样式的状态。
css">.element {animation-fill-mode: forwards;
}

animation-fill-mode 属性控制了动画执行前和执行后动画所应用的样式。以下是几种常见的取值以及它们的常用场景:

  1. none: 默认值。动画执行前和执行后不会应用任何样式,元素将保持动画执行前的样式状态。

    • 常用场景:当动画完成后,元素应该返回到初始状态,不应用任何样式。
  2. forwards: 在动画执行完成后,将应用动画的最后一帧的样式。即动画结束后元素会保持动画最后一帧的状态。

    • 常用场景:当动画结束后,希望元素保持在动画的最后状态,以便与其他元素或布局进行交互。
  3. backwards: 在动画执行前,将应用动画的第一帧的样式。即动画开始前元素会立即应用动画的第一帧的状态。

    • 常用场景:在动画尚未开始之前,希望元素立即显示动画的初始状态。
  4. both: 结合 forwardsbackwards。在动画执行前和执行后,都会应用动画的第一帧和最后一帧的样式。

    • 常用场景:在动画开始前和结束后都希望元素保持动画的初始状态和最终状态。

九、animation-play-state

官方文档

  • 取值: running, paused
  • 解释: 定义动画的播放状态,比如暂停或播放。
css">.element {animation-play-state: paused;
}

animation-play-state 属性用于控制动画的播放状态,可以将动画暂停或者继续播放。这个属性在以下场景中通常会很有用:

  1. 交互控制: 当用户与页面进行交互时,可以通过 JavaScript 来改变动画的播放状态。比如,当用户点击一个按钮时,可以暂停或者继续动画。

  2. 动态效果控制: 有时候需要根据用户的操作或者其他条件来控制动画的播放状态。比如,在滚动到页面某个位置时开始播放动画,滚动到另一个位置时暂停动画。

  3. 性能优化: 当页面中有大量动画时,可以根据用户的交互情况来动态地暂停或者继续播放动画,以降低页面的资源消耗,提升性能。

  4. 动画序列控制: 当需要播放一系列动画时,可以使用 animation-play-state 属性来控制每个动画的播放状态,以实现复杂的动画效果序列。

总之,animation-play-state 属性可以在各种情况下用于控制动画的播放状态,以实现更灵活、交互性更强的动画效果。

以下是一个具体的代码示例,演示了如何使用 animation-play-state 属性来控制动画的播放状态:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Animation Play State</title>
<style>css">.box {width: 100px;height: 100px;background-color: blue;position: relative;animation: move 2s linear infinite alternate;}@keyframes move {from {left: 0;}to {left: calc(100% - 100px);}}.controls {margin-top: 20px;}
</style>
</head>
<body><div class="box"></div><div class="controls"><button onclick="toggleAnimation()">Toggle Animation</button></div><script>function toggleAnimation() {var box = document.querySelector('.box');var currentState = box.style.animationPlayState;if (currentState === 'running') {box.style.animationPlayState = 'paused';} else {box.style.animationPlayState = 'running';}}</script>
</body>
</html>

在这个示例中,有一个蓝色的方块 .box,它有一个水平移动的动画效果。下方有一个按钮 .controls,点击按钮可以切换动画的播放状态。点击按钮时,通过 JavaScript 来切换 .box 元素的 animation-play-state 属性值,从而暂停或继续动画的播放。


http://www.ppmy.cn/ops/40840.html

相关文章

Java后端的接口参数两个interger 类型情况解决

get请求 &#xff0c;对应请求头 RequestParm, post请求&#xff0c; 对应请求体 &#xff0c;RequestBody 两个Integer参数情况 GetMapping("/insertStaffClass")public R<Void> insertStaffClass(RequestParam Integer staffId,RequestParam List<Integ…

Flutter 中的 CircleAvatar 小部件:全面指南

Flutter 中的 CircleAvatar 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CircleAvatar 是一个用于显示头像的圆形控件&#xff0c;通常包含一个图标、图片或者一个简单的文本字符。它在设计上与 Material Design 指南中的头像规范相匹配&#xff0c;常用于展示用户信…

【全开源】预约咨询小程序基于Fastadmin+ThinkPHP和Uniapp

功能介绍 基于FastadminThinkPHP和Uniapp开发的预约咨询系统&#xff0c;可应用于心理咨询、问诊、法律咨询等咨询类场景。 功能 1.后台可维护咨询师。 2.可以设置可预约的时间段。 3.可增加特殊时间不可预约&#xff0c;例如节假日。 4.可自定义擅长领域 5.可以自定义预约类…

C语言(指针)6

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

.NET开源、功能强大、跨平台的图表库LiveChart2

LiveCharts2 是 从LiveCharts演变而来,它修复了其前身的主要设计问题,它专注于在任何地方运行,提高了灵活性,并继承LiveCharts原有功能。 极其灵活的数据展示图库 (效果图) 开始使用 Live charts 是 .Net 的跨平台图表库,请访问 https://livecharts.dev 并查看目标平…

Docker——目录迁移

我们在生产环境中安装Docker时&#xff0c;默认的安装目录是/var/lib/docker&#xff0c;而通常情况下&#xff0c;规划给系统盘的目录一般为50G&#xff0c;该目录是比较小的&#xff0c;一旦容器过多或容器日志过多&#xff0c;就可能出现Docker无法运行的情况&#xff0c;所…

设计模式-迭代器模式

作者持续关注 WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 目录 定义 特点 使用场景 优缺点 (1) 优点 (2)…

类与对象(二)

封装 封装作为面向对象三大特性&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;之一&#xff0c;那如何实现封装性的呢&#xff1f;就又得拿出上面的访问修饰限定符的图 public: 就是在任何地方都可以访问 protected: 涉及子类在介绍继承时详细介绍 default: …

LeetCode //C - 93. Restore IP Addresses

93. Restore IP Addresses A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, bu…

Redis实战笔记

黑马点评项目笔记 一&#xff1a;数据交互&#xff1a; 1.把String解析成Java对象集合并且存入Redis及Java对象集合转换成JSON。 Overridepublic Result queryTypeList() {String s stringRedisTemplate.opsForValue().get("cache:list:");System.out.println(&qu…

Docker 部署 Nginx 实现一个极简的 负载均衡

背景: Nginx是异步框架的网页服务器&#xff0c;其常用作反向代理(负载均衡器)。在一般的小项目中, 服务器不多, 如果不考虑使用服务注册与发现, 使用Nginx 可以容易实现负载均衡。 在特此写一个快速入门 Nginx 的技术贴, 使用 Docker 部署 Nginx, 实现一个极简的加权轮询负载均…

【go项目01_学习记录11】

操作数据库 1 文章列表2 删除文章 1 文章列表 &#xff08;1&#xff09;先保证文章已经有多篇&#xff0c;可以直接在数据库中添加&#xff0c;或者访问链接: localhost:3000/articles/create&#xff0c;增加几篇文章。 &#xff08;2&#xff09;之前设置好了articles.ind…

爬虫 Python将网页内容保存为PDF(url转pdf) 譬如下载某个专栏下的全部文章

我看到一个不错的教程&#xff0c;想下载教程下全部文章到本地&#xff0c;有时间看看&#xff0c;但是问了作者没有电子档&#xff0c;就想办法了。 PS: 我一天天的到底在干嘛&#xff01;唉… 需求: 爬取一个网页里全部文章且存为pdf 参考链接: 【已解决】Python将网页内容…

JS_监听dom变化触发,new MutationObserver

MutationObserver 是一个用于监测 DOM 变化的接口&#xff0c;它提供了一种机制来异步观察在特定元素或文档中发生的 DOM 变化。 MutationObserver 的作用包括&#xff1a; 1.监测 DOM 变化&#xff1a;你可以创建一个 MutationObserver 实例&#xff0c;并指定一个回调函数。…

【论文笔记】CNN2GNN: How to Bridge CNN with GNN

Abstract CNN在视觉任务上表现优异&#xff0c;通常堆叠大量卷积核来提高训练表现&#xff1b; GNN成功用几个图神经层探索了图数据之间的潜在拓扑关系。 由于缺乏图结构&#xff0c;在非图数据上无法使用GNN&#xff0c;在大规模场景下推理延迟较高。 提出问题&#xff1a;如…

blender 制作圆角立方体模型,倒角实现。cocos 使用。导出fbx

图片&#xff1a; 步骤&#xff1a; 1.首先创建一个立方体&#xff0c;这里可以使用默认的立方体。 2.在属性面板选择如“扳手”图标一样的修改器工具。 3.设置数量和段数实现圆角的圆滑效果&#xff0c;没有菱角。 保存导出相关的教程&#xff1a;

Linux防火墙iptalbes

1 iptalbes 1.1 概念 防火墙(Firewall)是一种隔离技术&#xff0c;用于安全管理与筛选的软件和硬件设备&#xff0c;使计算机内网和外网分开&#xff0c;可以防止外部网络用户以非法手段通过外部网络进入内部网络&#xff0c;保护内网免受外部非法用户的侵入。 1.2 SELinux …

景源畅信电商:经营抖店需要用电脑吗?

在数字时代的浪潮中&#xff0c;抖音小店(简称抖店)成为了众多创业者和品牌的新宠。它不仅提供了便捷的线上销售渠道&#xff0c;还通过短视频的形式拉近了卖家与买家的距离。对于这样一个新兴的电商平台&#xff0c;许多跃跃欲试的商家都关心同一个问题&#xff1a;经营抖店究…

虚拟机有线已连接但无法上网—·可能性之一

背景 VMware虚拟机&#xff0c;搭建了三台Linux服务器&#xff0c;组成Hadoop集群&#xff0c;由于在Hadoop102上有一些经常与Mysql数据库交互的任务&#xff0c;需要经常打开运行&#xff0c;而Hadoop103和104则经常处于关闭状态&#xff0c;一段时间后再次启动集群时候&…

如何进行并行执行的诊断与调优 —— 《OceanBase 并行执行》系列 6

在诊断并行执行问题时&#xff0c;我们可以从两个主要方面展开分析。首先&#xff0c;从整体系统层面进行考量&#xff0c;比如检查网络是否畅通、磁盘IO是否过载、CPU资源是否已用满&#xff1b;其次&#xff0c;针对具体的SQL语句进行深入剖析&#xff0c;定位问题SQL&#x…