WHAT - CSS Animationtion 动画系列(二)

目录

  • 一、循环波浪
  • 二、关键帧呼应
  • 三、关键帧顺接
  • 四、利用 transform-origin 做拉伸
  • 五、大元素可拆分多个小元素联动
  • 六、预留视觉缓冲
  • 七、随机感:动画周期设置
  • 八、抛物线:两个内外div实现x和y向量运动

今天我们主要学习动画实现要素。

一、循环波浪

利用 delay 时间差,导致波浪平滑错位。

可以使用 CSS Animation 和 animation-delay 属性来实现一排蓝色的 div 循环波浪效果。以下是一个示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wave Animation</title>
<style>.wave-container {display: flex;justify-content: space-between;margin-top: 50px;width: 100%;}.wave {width: 50px;height: 50px;background-color: blue;animation: wave 1s linear infinite;}.wave:nth-child(2) {animation-delay: 0.2s;}.wave:nth-child(3) {animation-delay: 0.4s;}.wave:nth-child(4) {animation-delay: 0.6s;}.wave:nth-child(5) {animation-delay: 0.8s;}@keyframes wave {0% {transform: translateY(0);}50% {transform: translateY(-50px);}100% {transform: translateY(0);}}
</style>
</head>
<body><div class="wave-container"><div class="wave"></div><div class="wave"></div><div class="wave"></div><div class="wave"></div><div class="wave"></div></div>
</body>
</html>

在这个示例中,使用了五个蓝色的 div 元素 .wave 来表示波浪效果。通过设置不同的 animation-delay 来创建时间差,从而形成连续的波浪效果。 CSS 动画 wave 定义了元素的缩放动画,使得波浪效果连续播放。

请添加图片描述

二、关键帧呼应

双盒弹跳联动。

请添加图片描述

可以注意到上述非常丝滑的模拟了两个盒子在不同阶段的弹跳效果。

三、关键帧顺接

请添加图片描述

请添加图片描述

四、利用 transform-origin 做拉伸

transform-origin: 48% 100% 从下往上扩展/拉伸;transform-origin: 50% 5% 从上往下扩展/拉伸。

transform-origin 属性用于指定 CSS 变换的原点。默认情况下,变换的原点为元素的中心点 (50% 50%)。通过调整 transform-origin 的值,我们可以改变变换的起始位置,从而实现不同的效果。

  1. transform-origin: 48% 100%;:这个值将变换的原点设置为元素的底部中心。因此,当应用拉伸变换时,元素会从底部向上扩展。具体而言,变换会围绕元素底部边缘的水平中心点进行扩展。

  2. transform-origin: 50% 5%;:这个值将变换的原点设置为元素的顶部中心。因此,当应用拉伸变换时,元素会从顶部向下扩展。具体而言,变换会围绕元素顶部边缘的水平中心点进行扩展。

以下是具体的代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Stretch Animation</title>
<style>.stretch-container {display: flex;margin-top: 50px;width: 100%;}.stretch {width: 50px;height: 50px;background-color: blue;border-radius: 50%;animation: stretch 1s linear infinite alternate;}.stretch:nth-child(1) {transform-origin: 48% 100%;}.stretch:nth-child(2) {transform-origin: 50% 5%;}@keyframes stretch {0% {transform: scaleY(1);}100% {transform: scaleY(2);}}
</style>
</head>
<body><div class="stretch-container"><div class="stretch"></div><div class="stretch"></div></div>
</body>
</html>

在这个示例中,有两个蓝色的 div 元素 .stretch,通过不同的 transform-origin 值,分别实现了从底部向上拉伸和从顶部向下拉伸的效果。

请添加图片描述
请添加图片描述

五、大元素可拆分多个小元素联动

比如人物举着信封入场,可以信封和手做额外的附属动画,放大动作幅度。

请添加图片描述
图片来源:陈*真@腾讯

六、预留视觉缓冲

动画循环时可以设置 80% - 100% 关键帧之间不变。

预留视觉缓冲的目的是在动画循环的过程中,使得动画的最后一帧保持一段时间,以给用户提供视觉缓冲,使动画更加平滑和自然。在 CSS 中,可以通过设置关键帧动画的某些关键帧保持一段时间来实现预留视觉缓冲。

例如,在动画的 80% 到 100% 之间保持最后一帧的状态,可以让动画在结束阶段缓缓减速,给用户一个更平滑的动画效果。

以下是一个具体的示例,展示了如何在动画的 80% 到 100% 之间保持最后一帧的状态:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Animation with Visual Buffering</title>
<style>.box {width: 100px;height: 100px;background-color: blue;position: relative;animation: move 2s linear infinite;}@keyframes move {0% {transform: translateX(0);}80% {transform: translateX(200px);}100% {transform: translateX(200px);}}
</style>
</head>
<body><div class="box"></div>
</body>
</html>

在这个示例中,动画从 0% 到 80% 的阶段进行了水平移动,然后在 80% 到 100% 的阶段保持了最后一帧的状态,即元素位于水平方向上的最终位置。

这样做可以使得动画在结束阶段缓缓减速,给用户一个更平滑的动画体验。

七、随机感:动画周期设置

多个元素同时运动,可以设置不同 duration 和 delay。除⾮时间是各粒⼦时间的最⼩公倍数,否则不会回归到初始状态,从⽽产⽣随机感。

在多个元素同时运动时,如果它们具有不同的 durationdelay,它们的动画周期不会是一个固定的整数倍关系,因此它们不会在同一时刻回归到初始状态,从而产生了一种随机感。

这是因为当动画周期不是一个固定的整数倍关系时,各个元素的动画在同一时刻处于不同的阶段,导致它们的动画效果看起来更加错落有致、自然多样。

以下是一个具体示例,展示了如何通过设置不同的 durationdelay,使得多个元素同时运动,产生随机感的动画效果:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Random Motion</title>
<style>.box {width: 50px;height: 50px;background-color: blue;position: absolute;border-radius: 50%;}.box:nth-child(1) {animation: move1 2s linear infinite;top: 100px;left: 100px;}.box:nth-child(2) {animation: move2 3s linear infinite;top: 200px;left: 200px;}@keyframes move1 {0% {transform: translateX(0);}100% {transform: translateX(200px);}}@keyframes move2 {0% {transform: translateY(0);}100% {transform: translateY(200px);}}
</style>
</head>
<body><div class="box"></div><div class="box"></div>
</body>
</html>

在这个示例中,有两个蓝色的圆形 .box 元素,它们分别通过不同的 animation 属性设置了不同的动画效果(move1move2),并且具有不同的起始位置和动画持续时间。

因此,它们的动画周期不是一个固定的整数倍关系,从而产生了一种随机感的动画效果。

八、抛物线:两个内外div实现x和y向量运动

主要就是利用两个内外div实现x向量运动和y向量运动,y向量运动引入贝塞尔曲线,即可实现适当曲线运动。

在上一篇我们在学习贝塞尔曲线时实现过。

<!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>

我们是实现了一个 div 在 left 和 top 两个方向属性上的不同速度的变化来模拟抛物线。

但假如我们定义了如下:

  @keyframes horizontalMove {0% {transform: translateX(0);}100% {transform: translateY(200px);}}@keyframes verticalMove {0% {transform: translateY(0);}100% {transform: translateY(200px);}}

主要就是利用x向量运动和y向量运动,x向量匀速运动,y向量运动引入贝塞尔曲线,即可实现适当曲线运动。

这种方法可以应用于各种场景,比如游戏中的角色移动、用户界面中的动态效果、数据可视化中的图表动画等。通过调整贝塞尔曲线的控制点,可以实现不同形状的曲线运动,从而满足不同的需求和设计目的。

以下是一个更普适的示例,演示了如何利用两个 div 元素和贝塞尔曲线来实现适当的曲线运动:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bezier Curve Animation</title>
<style>.outer {position: relative;width: 400px;height: 400px;border: 1px solid black;overflow: hidden;}.inner {position: absolute;width: 50px;height: 50px;background-color: blue;border-radius: 50%;animation: moveX 2s linear infinite, moveY 2s cubic-bezier(.74,.2,.95,.47) infinite;}@keyframes moveX {0% {left: 0;}100% {left: calc(100% - 50px);}}@keyframes moveY {0% {top: 0;}100% {top: calc(100% - 50px);}}
</style>
</head>
<body><div class="outer"><div class="inner"></div></div>
</body>
</html>

在这个示例中,.outer div 元素作为外部容器,限制活动范围.inner div 元素作为内部元素,利用两个不同的动画分别控制 x 向量和 y 向量的运动。在 y 向量的运动中,引入了贝塞尔曲线,使得动画呈现出适当的曲线运动效果。

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

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

相关文章

Axure网上超市用户端APP原型 (O2O生鲜电商/买菜到家/数字零售/京东到家/抖音超市领域)

作品概况 页面数量&#xff1a;共 100 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 适用领域&#xff1a;O2O生鲜电商、网上超市、买菜到家、数字零售 作品特色 本作品为网上超市用户消费端Axure交互原型&#xff0c;属于…

二叉树路径总和

题目1&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子…

Cesium 3DTileset Style 原理简析

Cesium 3DTileset Style 原理简析 应用层会看到这样的使用。那么原理是什么, 为啥写 height, 除了这个还有啥? const tileset await Cesium.Cesium3DTileset.fromUrl("../../public/tileset/building/tileset.json"); tileset.style new Cesium.Cesium3DTileSty…

红黑树的平衡

1.红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c…

OpenAI 刚刚宣布了 “GPT-4o“ 免费用户开放、通过 API 可用

OpenAI 刚刚宣布了 “GPT-4o”。它可以通过语音、视觉和文本进行推理。 该模型速度提高了 2 倍&#xff0c;价格降低了 50%&#xff0c;比 GPT-4 Turbo 的速率限制高出了 5 倍。 它将对免费用户开放、通过 API 可用。 与 GPT-4 相比&#xff0c;GPT-4o 的速度和额外的编码能力…

冒险岛vcruntime140_1.dll无法继续执行代码要怎么处理?教你一键修复vcruntime140_1.dll

当你在玩着冒险岛的时候&#xff0c;突然弹出一个vcruntime140_1.dll无法继续执行代码&#xff0c;这时候你是不是一脸懵逼&#xff1f;不知道怎么去解决&#xff1f;其实不需要担心&#xff0c;这是一个小问题&#xff0c;vcruntime140_1.dll文件是一个非常常用的dll文件&…

国际生物多样性科普暨母亲节亲子活动在天河公园举行

引言&#xff1a;"人类是命运共同体&#xff0c;不论是战胜新冠疫情&#xff0c;还是加强生物多样性保护&#xff0c;实现全球可持续发展&#xff0c;唯有团结合作&#xff0c;才能有效应对全球性挑战。生态兴则文明兴。我们应该携手努力&#xff0c;共同推进人与自然和谐…

Proxy和Reflect,打造灵活的JS代理机制 (代码示例)

在 JavaScript 中&#xff0c;代理&#xff08;Proxy&#xff09;和反射&#xff08;Reflect&#xff09;是 ES6 引入的两个新特性。Proxy用于创建一个对象的代理&#xff0c;从而实现对这个对象的操作的拦截、转换或扩展&#xff1b;而Reflect则提供了一系列与 JavaScript 运行…

软件提示找不到msvcr120.dll怎么修复,分享5种靠谱的修复方法

当您在使用电脑过程中遇到程序运行出错&#xff0c;提示缺少msvcr120.dll文件怎么办。msvcr120.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;主要用于支持某些应用程序运行所需的C库文件。如果该文件丢失或损坏&#xff0c;依赖于此文件的应用程序便无…

Kotlin扩展函数和运算符重载

扩展函数 fun String.lettersCount():Int{var count 0for(i in this){if(i.isLetter())count}return count } fun main(){val str:String "12we"println(str.lettersCount()) } 相当于直接将方法写在类里面。函数体内可以直接使用this而不用传参。 运算符重载 …

IDEA找不到database图标的解决方法

首先右边侧边栏和左边的侧边栏都看一下&#xff0c;确认没有数据库图标以后再参考下面方法。 第一步&#xff0c;打开设置&#xff0c;在插件里搜索database 第二步 安装好&#xff0c;点击确定 返回主页面&#xff0c;左边的侧边栏会出现database图标&#xff0c;点击号就可以…

[更改挂载点]重新挂载硬盘

显示磁盘空间使用情况 df -hdf -h 命令的输出显示了文件系统的磁盘空间使用情况。 这里 /dev/nvme0n1p1 设备&#xff08;大小为 880GB&#xff09;已经被挂载到 /media/nvidia/SSD 目录下&#xff0c;并且使用了 304GB&#xff0c;剩余 532GB&#xff0c;使用率为 37%。这意…

Qt自定义QpushButton分别在c++/python中实现

//.h文件#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> #include<QMouseEvent> #include<QPropertyAnimation> #include<QResizeEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; }class Widget : public QWi…

JETBRAINS IDES 分享一个2099通用试用码!PhpStorm 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

Nginx 7层负载均衡的搭建

目录 负载均衡的理解 修改配置文件 测试 1. 选择在 DMZ 区测试&#xff0c;使用 db 服务器进行测试 2.选择在外网测试负载均衡效果 负载均衡的理解 负载均衡&#xff1a;load balancer&#xff0c;简称LB Nginx 既是一个 web 服务器软件&#xff0c;也是一个负载均衡软件&a…

HTML5+CSS3 将图片和文字置于一行

将文字对齐图片中心的水平位置 今天课堂作业上有一段是要做出文字与图片在一行且文字对齐图片的中心位置。课上用inline-block做的&#xff0c;但盒子总是不受控制。于是回来随便找了个图片用vertical-align做成功了。 这是原本的样式&#xff08;加了边框方便看盒子&#xff…

耐克、肯德基、美宝莲…六大品牌的经典广告语是如何诞生的?

近期&#xff0c;创意翻译公司franklyfluent推出了一个名为“Hard to Make, Easy to Break”的创意户外活动&#xff0c;展示了创意和文字艺术在品牌翻译中的重要性。 “Hard to Make, Easy to Break”的活动于2024年5月份在英国正式发布。这些移动广告牌出现在伦敦的各个体育…

OpenAI 重磅发布:ChatGPT Mac 桌面应用震撼上线!

OpenAI 重磅发布&#xff1a;ChatGPT Mac 桌面应用震撼上线&#xff01; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff0…

Google IO 2024有哪些看点呢?

有了 24 小时前 OpenAI 用 GPT-4o 带来的炸场之后&#xff0c;今年的 Google I/O 还未开始&#xff0c;似乎就被架在了一个相当尴尬的地位&#xff0c;即使每个人都知道 Google 将发布足够多的新 AI 内容&#xff0c;但有了 GPT-4o 的珠玉在前&#xff0c;即使是 Google 也不得…

2024/5/15 英语每日一段

Many pet owners are now turning to pet insurance policies to avoid higher vet bills should something bad happen unexpectedly. But Carlson said that preventive veterinary care—like vaccination, parasite control and weight management—is "the best way …