WHAT - CSS Animationtion 动画系列(一)

目录

  • 一、介绍
  • 二、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 中定义关键帧和动画属性,可以实现元素在页面上的平滑过渡、旋转、缩放等动态效果。

/* @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,则表示没有动画效果。
@keyframes slide {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(100px);
  }
}
.element {
  animation-name: slide;
}

三、animation-duration

官方文档

  • 取值: 时间值,如 2s, 200ms
  • 解释: 定义动画持续的时间,指示动画完成一次循环所需的时间长度。
@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)
  • 解释: 定义动画的时间函数,控制动画的速度变化,也可以说它控制了动画在时间上的变化速度。
@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>
  .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
  • 解释: 定义动画开始之前的延迟时间,指示动画在元素加载后多久开始执行。
.element {
  animation-delay: 1s;
}

六、animation-iteration-count

官方文档

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

七、animation-direction

官方文档

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

八、animation-fill-mode

官方文档

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

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

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

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

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

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

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

九、animation-play-state

官方文档

  • 取值: running, paused
  • 解释: 定义动画的播放状态,比如暂停或播放。
.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>
  .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 属性值,从而暂停或继续动画的播放。

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

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

相关文章

HackMyVM-Minimal

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 gobuster 文件包含漏洞 提权 web信息收集 main方法 question_1 question_2 question_3 prize.txt 软连接 信息收集 arp ┌──(root?0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: E…

中职智慧校园建设内容规划

1. 渠道先行 1) IT根底设施渠道是支撑智慧学校使用体系所必需的运转环境&#xff0c;是首要需求建造的内容&#xff0c;但是要遵从有用准则&#xff0c;IT设备开展很快&#xff0c;更新很快&#xff0c;不要片面追求全而新&#xff1b; 2) 使用根底渠道是支撑智慧学校使用体系作…

SCI一区论文蛇优化器(SO)独家原创改进!适合发表paper!

购买改进/原创算法避坑指南 这会触及很多人的利益&#xff0c;但是不得不发声&#xff0c;教大家避坑&#xff01;因为现在元启发式/群智能算法改进、原创算法市场太乱了&#xff0c;导致产生了很多受害者。 1、增加复杂度的不要买&#xff0c;大家可以叫商家给出运行时间比较…

Java 修饰符

Java 修饰符 Java语言提供了很多修饰符&#xff0c;主要分为以下两类&#xff1a; 访问修饰符 非访问修饰符 修饰符用来定义类、方法或者变量&#xff0c;通常放在语句的最前端。我们通过下面的例子来说明&#xff1a; public class ClassName { // … } private boolean myF…

74从零开始学Java之排序算法中的冒泡和选择排序

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们要想成为一个优秀的程序员,其实非常关键的一点就是要锻炼培养自己的编程思维,就好比一个狙击手,要通过大量的射击训练要用大量的子弹喂出来。同样的…

第十三篇:智慧之网:深度探索关系型数据库的数学奥秘与实战技艺

智慧之网&#xff1a;深度探索关系型数据库的数学奥秘与实战技艺 1. 引言 1.1 数据时代的基石 在数字化的浪潮中&#xff0c;数据已成为新时代的石油&#xff0c;而关系型数据库则是这座数据矿藏的精炼厂。自E.F. Codd在1970年提出关系模型以来&#xff0c;关系型数据库以其坚…

新iPadPro是怎样成为苹果史上最薄产品的|Meta发布AI广告工具全家桶| “碾碎一切”,苹果新广告片引争议|生成式AI,苹果倾巢出动

Remini走红背后&#xff1a;AI生图会是第一个超级应用吗&#xff1f;新iPadPro是怎样成为苹果史上最薄产品的生成式AI&#xff0c;苹果倾巢出动Meta发布AI广告工具全家桶&#xff0c;图像文本一键生成解放打工人苹果新iPadPro出货量或达500万台&#xff0c;成中尺寸OLED发展关键…

Zynq开发-使用PYNQ快速入门摄像头MIPI驱动(OV5640)

目录 1. 简介 2. 配置代码 2.1 初始化寄存器 2.2 分辨率寄存器 2.3 白平衡寄存器 2.4 配置寄存器代码 2.5 顶层代码 3. 细节指引 4. 总结 1. 简介 PYNQ是一种基于Python的开发环境&#xff0c;专门设计用于快速、简便地在Xilinx的Zynq平台上进行开发。在《Zynq开发之…

关于‘==’与equals的区别

我写的也不清楚&#xff0c;有兴趣的可以看这位大佬的文章链接&#xff0c;说的很清楚 https://www.cnblogs.com/Latiny/p/8099581.html#!comments 与 equals 方法 判断两个变量是否相等有两种方式&#xff1a;一种是利用 运算符&#xff0c;另一种是利用equals方法。 注意…

【C++11】C++11类与模板语法的完善

目录 一&#xff0c;新的类功能 1-1&#xff0c;默认成员函数 1-2&#xff0c;强制生成关键字 二&#xff0c;可变参数模板 2-1&#xff0c;模板参数包 2-2&#xff0c;STL容器empalce的相关接口 一&#xff0c;新的类功能 1-1&#xff0c;默认成员函数 C11之前的类中有…

自拍欺骗成为流行的身份证件欺诈技术

据 Socure 称&#xff0c;文档图像叠加是 2023 年最流行的身份证件欺诈技术&#xff0c;在所有被拒绝的身份证件中&#xff0c;有 63% 发生这种情况。 自拍欺骗和冒充在与文件相关的身份欺诈中占主导地位 当用户拍摄照片或使用 ID 的屏幕截图图像&#xff08;而不是提供文档的…

【牛客】SQL201 查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

1、描述 有一个薪水表&#xff0c;salaries简况如下&#xff1a; 请你查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t&#xff0c;以上例子输出如下&#xff1a; 2、题目建表 drop table if exists salaries ; CREATE TABLE salaries ( emp_no int(11) NOT N…

现代制造之Solidworks三维建模篇

现代制造 有现代技术支撑的制造业&#xff0c;即无论是制造还是服务行业&#xff0c;添了现代两个字不过是因为有了现代科学技术的支撑&#xff0c;如发达的通信方式&#xff0c;不断发展的互联网&#xff0c;信息化程度加强了&#xff0c;因此可以为这两个行业增加了不少优势…

【微服务】spring aop实现接口参数变更前后对比和日志记录

目录 一、前言 二、spring aop概述 2.1 什么是spring aop 2.2 spring aop特点 2.3 spring aop应用场景 三、spring aop处理通用日志场景 3.1 系统日志类型 3.2 微服务场景下通用日志记录解决方案 3.2.1 手动记录 3.2.2 异步队列es 3.2.3 使用过滤器或拦截器 3.2.4 使…

唤醒手腕 Go 语言 并发编程、Channel通道、Context 详细教程(更新中)

并发编程概述 ​ 一个进程可以包含多个线程&#xff0c;这些线程运行的一定是同一个程序&#xff08;进程程序&#xff09;&#xff0c;且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位&#xff0c;线程是调度运行的基本单位&#xff0c…

CSS---Emmet(二)

一、Emmet语法 Emmet语法是一种用于快速编写HTML和CSS的缩写技术。它允许开发者通过简洁的表达式快速生成复杂的代码结构&#xff0c;极大地提高了编码效率。使用Emmet&#xff0c;你只需要写出一些简短的缩写符号和操作符&#xff0c;然后通过快捷键&#xff08;通常是Tab键&…

[单机]完美国际_V155_GM工具_VM虚拟机

[端游] 完美国际单机版V155一键端PC电脑网络游戏完美世界幻海凌云家园 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是…

定时任务的几种实现方式

定时任务实现的几种方式&#xff1a; 1、JDK自带 &#xff08;1&#xff09;Timer&#xff1a;这是java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。…

kali linux2024.1版安装

1 基于 VMware 安装 Kali 系统 打开已经安装好的 VMware 程序&#xff0c;点击选项卡中的“主页”--》而后点击“创建新的虚拟机” 选择“典型(推荐)”&#xff0c;并点击“下一步” 客户机操作系统镜像选择&#xff1a;选择“稍后安装操作系统”&#xff0c;并点击“下一步”…

网安面经之SSRF漏洞

一、ssrf漏洞 1、ssrf原理&#xff1f;危害&#xff1f;修复&#xff08;防御&#xff09;&#xff1f; 原理&#xff1a;SSRF就是服务器端请求伪造漏洞、它是一种由攻击者构造&#xff0c;由服务端发起请求的一个网络攻击&#xff0c;一般用来在外网探测或攻击内网服务&…