【CSS3】CSS3 动画 ⑤ ( 动画速度曲线 | 设置动画步长 | 动画匀速执行 | 动画分 2 步执行 | 使用动画步长实现打字机效果 )

news2024/11/24 14:22:23

文章目录

  • 一、动画速度曲线设置
  • 二、代码示例 - 动画速度曲线设置
    • 1、代码示例 - 动画匀速执行
    • 2、代码示例 - 动画分 2 步执行
  • 三、代码示例 - 使用动画步长实现打字机效果





一、动画速度曲线设置



CSS3 样式中 , 设置 动画速度曲线 的属性是 animation-timing-function 属性 ;

animation-timing-function 属性定义了动画从 初始 CSS 样式 变为 结束状态 时 所消耗的时间 ;


animation-timing-function 属性常用 属性值 如下 :

  • linear : 动画在整个执行过程中速度都是匀速的 ;
  • ease : 默认属性值 , 动画首先以低速开始 , 然后加速执行 , 最后在执行结束前降低速度 ;
  • ease-in : 动画以低速开始 ;
  • ease-out : 动画以低速结束 ;
  • ease-in-out : 动画以低速开始和结束 ;
  • cubic-bezier(n,n,n,n) : 自定义 速度曲线 , 贝塞尔曲线 , 该属性值的 四个参数 用于定义贝塞尔曲线的控制点 ;
  • steps(n) : 指定动画的步长 , 默认情况下是无级变速 , 也就是动画以微小趋势运行 , 整个过程动画可能变换几十次到数百次不等 , 如果设置为 3 步长 , 动画只会变换 3 次 ;

令动画 低速开始 加速执行 低速结束 , 可以对执行动画的 标签元素 设置如下属性 :

animation-timing-function: ease-in-out;

如果想要 自定义 动画的 速度变化 贝塞尔曲线 , 可以使用如下 属性设置 :

animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);

设置 steps(n) 属性值 , 可以将动画的执行步骤拆解成 n 个步骤 , 借助该属性 , 可以实现很多特殊效果 ;





二、代码示例 - 动画速度曲线设置




1、代码示例 - 动画匀速执行


核心代码是 :

animation: progress 4s linear forwards;

该动画的名称是 progress , 执行一个周期是 4 秒 , 动画执行速度线性增加 ;


代码示例 :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 设置 meta 视口标签 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>动画速度曲线 | 设置动画步长</title>
    <style>
        div {
            width: 0px;
            height: 50px;
            background-color: pink;
            /* 设置动画属性 */
            animation: progress 4s linear forwards;
        }
        
        @keyframes progress {
            /* 设置动画节点 */
            0% {
                /* 开始时盒子模型宽度 0 */
                width: 0;
            }
            100% {
                /* 执行结束后盒子模型宽度 200 */
                width: 200px;
            }
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

执行效果 : 下面的 div 盒子模型 , 从 0 宽度逐渐增加到 200 像素宽度 ;
在这里插入图片描述


2、代码示例 - 动画分 2 步执行


核心代码是 :

animation: progress 4s steps(2) forwards;

该动画的名称是 progress , 执行一个周期是 4 秒 , 动画执行时分两步完成 ;


代码示例 :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 设置 meta 视口标签 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>动画速度曲线 | 设置动画步长</title>
    <style>
        div {
            width: 0px;
            height: 50px;
            background-color: pink;
            /* 设置动画属性 */
            animation: progress 4s steps(2) forwards;
        }
        
        @keyframes progress {
            /* 设置动画节点 */
            0% {
                /* 开始时盒子模型宽度 0 */
                width: 0;
            }
            100% {
                /* 执行结束后盒子模型宽度 200 */
                width: 200px;
            }
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

执行效果 :

  • 动画开始执行时 , 没有任何效果 ;
    在这里插入图片描述
  • 执行 2 秒后 , 执行第一步 , 盒子模型变为 100 像素 ;

在这里插入图片描述

  • 执行 4 秒后 , 执行结束 , 盒子模型变为 200 像素 ;

在这里插入图片描述





三、代码示例 - 使用动画步长实现打字机效果



实现思路 :

在盒子模型中 , 设置 10 个文字 :

<div>实现一个打字机效果吧</div>

动画的效果是 盒子模型 从 0 到 200 像素 , 每个文字 20 像素 ;

        @keyframes progress {
            /* 设置动画节点 */
            0% {
                /* 开始时盒子模型宽度 0 */
                width: 0;
            }
            100% {
                /* 执行结束后盒子模型宽度 200 */
                width: 200px;
            }
        }

设置每个文字 20 像素 , 动画分为 10 步 , 盒子模型每次增加 10 像素宽度 , 正好可以将动画显示出来 ;

使用 white-space: nowrap; 样式 , 可以强行将文字设置为 一行 , 使文字不换行 ;

使用 overflow: hidden; 可以隐藏 盒子模型 中 边界之外的内容 ;

设置 行高 = 高度 , 可以令文本垂直居中 ;

        div {
            width: 0px;
            height: 30px;
            /* 行高 = 高度 -> 垂直居中 */
            line-height: 30px;
            background-color: pink;
            /* 设置动画属性 */
            animation: progress 4s steps(10) forwards;
            /* 文字大小设置为 20 像素 , 正好 10 个字 200 像素 */
            font-size: 20px;
            /* 强制令文字显示在一行 */
            white-space: nowrap;
            /* 隐藏盒子模型边界外的内容 */
            overflow: hidden;
        }

代码示例 :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 设置 meta 视口标签 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>动画速度曲线 | 设置动画步长</title>
    <style>
        div {
            width: 0px;
            height: 30px;
            /* 行高 = 高度 -> 垂直居中 */
            line-height: 30px;
            background-color: pink;
            /* 设置动画属性 */
            animation: progress 4s steps(10) forwards;
            /* 文字大小设置为 20 像素 , 正好 10 个字 200 像素 */
            font-size: 20px;
            /* 强制令文字显示在一行 */
            white-space: nowrap;
            /* 隐藏盒子模型边界外的内容 */
            overflow: hidden;
        }
        
        @keyframes progress {
            /* 设置动画节点 */
            0% {
                /* 开始时盒子模型宽度 0 */
                width: 0;
            }
            100% {
                /* 执行结束后盒子模型宽度 200 */
                width: 200px;
            }
        }
    </style>
</head>

<body>
    <div>实现一个打字机效果吧</div>
</body>

</html>

执行结果 :

执行时 , 每个字逐个出现 ;
在这里插入图片描述
执行完毕后 , 所有的文本都出现 ;

在这里插入图片描述

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

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

相关文章

Kubernetes集群yum安装部署

第四阶段 时 间&#xff1a;2023年8月10日 参加人&#xff1a;全班人员 内 容&#xff1a; Kubernetes集群yum安装部署 目录 yum方式部署K8S集群 一、环境搭建 1、准备环境 2、关闭防火墙 3、修改master主机的计算机名设置host文件 二、安装部署 &#xff08;一&…

OpenCV实验箱---机械臂自由抓取例程开发使用手册

目录 一、项目介绍 项目背景&#xff1a; 相机型号&#xff1a; 二、机械臂自由抓取演示 使用注意事项&#xff1a; 操作步骤&#xff1a; 三、核心代码讲解 ① 机械臂相关运动驱动代码 ② BGR图像转换伪彩色深度图像代码 ③ 目标跟随及抓取动作代码 开发者&#xff1a;…

CLIP论文精度

CLIP论文精度 Zero-shot CLIP多模态模型 Image Endecoder是一个图片编码器&#xff0c;既可以是ResNet,也可以是Vision Transformer. Text Encoder和Image Encoder产生的两组特征进行对比学习&#xff08;无监督训练&#xff09; 分类头&#xff1f;“分类头” 是指网络结…

第02天 什么是JWT ?

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 每天一个知识点 ✨特色专栏&#xff1…

MChat-Gpt V1.0.0 (将ChatGpt机器人接入内网供全体使用)

Github>https://github.com/MartinxMax/MChat-Gpt 首页 MChat-Gpt V1.0.0将ChatGpt机器人接入内网供全体使用 你需要一个ChatGpt账户如果您在中国则需要使用代理访问,设置TUN代理模式 安装依赖 选择你的系统进行安装 服务端配置 #python3 ChatGpt_Server.py -h 使用&a…

cve-2021-2394 weblogic反序列化漏洞分析

前几天weblogic 7月例行更新中&#xff0c;修复了一个Rce漏洞。该漏洞性质属于绕过之前的反序列化漏洞补丁。要了解这个漏洞的原因&#xff0c;我们首先要学习其他几个漏洞的原理。 一 weblogic 反序列化绕过指南 本章节只是大概讲解一下如何绕过weblogic反序列化漏洞的补丁。…

【金融量化】Python实现根据收益率计算累计收益率并可视化

1 理论 理财产品&#xff08;本金100元&#xff09; 第1天&#xff1a;3% &#xff1a;&#xff08;13%&#xff09; ✖ 100 103 第2天&#xff1a;2% &#xff1a;&#xff08;12%&#xff09;✖ 以上 103 2.06 第3天&#xff1a;5% : &#xff08;15%&#xff09;✖ 以上…

【指针模拟实现库函数strlen】

指针模拟实现库函数strlen 1.库函数strlen含义 strlen是用来计算字符串长度的。&#xff08;不包含’\0’) 2.assert断言介绍 assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报 错终⽌运⾏。这个宏常常…

【算法|数组】滑动窗口

算法|数组——滑动窗口 引入 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子数组&#xff0c;返回 0 。 示例…

putty使用记录

在官网下载并安装putty 一、SSH 二、FTP open 192.168.1.118 put -r C:\Users\Administrator\Desktop\test /opt/lanren312/test # 上传&#xff08;文件夹&#xff09; get -r /opt/lanren312/test C:\Users\Administrator\Desktop\test2 # 下载&#xff08;文件夹&#xff…

Linux Sudo 史上最大bug

自从安全厂商于近期公开了Linux系统中存在Sudo漏洞后&#xff0c;红帽、SUSE、Debian及Ubuntu等相关发行版本便开始相继推出了针对Linux Sudo漏洞的更新补丁&#xff0c;来避免由于Sudo漏洞而将本地端系统的最高权限陷于风险之中。 Sudo是linux系统管理指令&#xff0c;是允许系…

Telerik UI for ASP.NET Core Crack

Telerik UI for ASP.NET Core Crack Telerik ASP.NET Core还包括MVC和Kendo UI捆绑包(用于JavaScript)、Figma的设计工具包以及文档处理库、用于ASP.NET Core的Telerik REPL、RTL支持、辅助功能和键盘导航、主题化、虚拟课堂培训、详细文档、演示、KBs和世界级支持。使用一整套…

树结构--介绍--二叉树遍历的递归实现

目录 树 树的学术名词 树的种类 二叉树的遍历 算法实现 遍历命名 二叉树的中序遍历 二叉树的后序遍历 二叉树的后序遍历迭代算法 二叉树的前序遍历 二叉树的前序遍历迭代算法 树 树是一种非线性的数据结构&#xff0c;它是由n(n≥0)个有限节点组成一个具有层次关系…

Java基础篇--基本数据类型

目录 前言&#xff1a; 内置数据类型 类型默认值 示例: 内置数据类型转换 自动类型转换&#xff08;隐式类型转换&#xff09;&#xff1a; 强制类型转换&#xff08;显式类型转换&#xff09;&#xff1a; 隐含强制类型转换&#xff1a; 引用类型 前言&#xff1a; …

Java基础练习八(二维数组)

1.装水问题 有一个 异形 容器&#xff0c;用一个 n * n 的二维数组来表示。其中 1 表示容器实心部分&#xff0c; 0 表示空心部分。现使用此容器装水&#xff0c;能装多少水&#xff08;每个元素都表示一份水&#xff0c;只有有挡板的部分能装水&#xff09;&#xff1f; publi…

【学习】若依源码(前后端分离版)之 “ 获取角色权限信息及动态路由”

大型纪录片&#xff1a;学习若依源码&#xff08;前后端分离版&#xff09;之 “ 获取角色权限信息及动态路由” 获取用户信息获取路由信息 承接上回&#xff0c;我们发现在login请求后面跟了两个请求&#xff0c;今天我们就来了解一下两个请求的含义。 获取用户信息 先看 ‘…

Vulhub之Apache HTTPD 换行解析漏洞(CVE-2017-15715)

Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 1、docker-compose build、docker-compo…

yolov5的报错

【定期水一期】 &#xff08;这个问题很抓马&#xff0c;可以看一下这篇文章&#xff1a;Git Bash 教程&#xff01;【不是所有人都会用Git】&#xff09; 一&#xff1a;没有cv2这个模块 解决方案&#xff1a; pip install opencv-python -i http://pypi.douban.com/simple/…

Java用方法实现数组拷贝

Java用方法实现数组拷贝 需求分析代码实现小结Time 需求分析 1.首先&#xff0c;考虑方法是否需要接收数据处理&#xff1f; 该方法的目的是拷贝数组&#xff0c;拷贝哪一个数组呢&#xff1f; 需要调用者传递 所以&#xff0c;参数应该是一个数组 2.接着&#xff0c;考虑方法是…

k8s常用资源管理

目录 Pod&#xff08;容器组&#xff09;&#xff1a;Pod是Kubernetes中最小的部署单元&#xff0c;可以包含一个或多个容器。Pod提供了一种逻辑上的封装&#xff0c;使得容器可以一起共享网络和存储资源 1、创建一个pod 2、pod管理 pod操作 Pod&#xff08;容器组&#xff…