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

2023-08-10 20:14:15





一、动画速度曲线设置



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>

执行结果 :

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

在这里插入图片描述

更多推荐

C++,构造函数、拷贝构造函数、 常成员、常对象、static

一、构造方法构造方法的名字必须与类名同名它不具有任何返回值,也不能声明返回值类型,连void都不能写构造方法可以重载构造方法声明一般格式为类名(<形参列表>);定义构造方法格式为类名::类名(<形参列表>){.......}构造方法中的this指向新创建的对象.构造方法的功能是由用户定义的,用户根据初始化的要求设计方法

Kotlin协程CoroutineScope异步async取消cancel等待await的任务

Kotlin协程CoroutineScope异步async取消cancel等待await的任务importkotlinx.coroutines.*funmain(args:Array<String>){runBlocking{valmScope=CoroutineScope(Dispatchers.IO).async{

Batbot智慧能源管理云平台:拥抱数字化,提高能源效率!

我们拥抱数字化,以帮助提高能源效率。政府已采取措施增强国家的环境信誉,旨在实现雄心勃勃的法定目标,即到2035年,将国家温室气体排放量减少78%(与1990年相比)。拥抱数字化,提高能源效率!随着许多类似举措的顺利实施,建筑环境可能正面临着越来越大的减少碳足迹的压力。鉴于目前建筑物的碳排放量约占全球碳排放量的39%,并

并发编程——线程池

文章目录线程池介绍线程池核心属性核心方法execute方法addWorker添加工作线程runWorker执行任务getTask工作线程排队拿任务线程池介绍Java构建线程的方式newThreadnewRunnablenewCallable为了避免频繁创建和销毁线程造成不必要的性能,一般在使用线程时,会采用线程池。线程

什么是HTTP/2?它与HTTP/1.1相比有什么改进?

聚沙成塔·每天进步一点点⭐专栏简介⭐HTTP/2简介⭐主要的改进和特点⭐总结⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统

linux之perf(4)stat统计

Linux之perf(4)stat统计Author:OncedayDate:2023年9月16日漫漫长路,才刚刚开始…注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题。参考文档:Tutorial-PerfWiki(kernel.org)perf-stat(1)-Linuxmanualpage(ma

springboot+springSecurity+jwt实现登录认证后令牌授权

springboot+springSecurity+jwt实现登录认证后令牌授权(已绑定整个项目的源码)目录springboot+springSecurity+jwt实现登录认证后令牌授权(已绑定整个项目的源码)一、自定义数据源登录认证1、实现springsecurity中UserDetails类2、用户查询和更新密码

三维模型3DTile格式轻量化在数据存储的重要性分析

三维模型3DTile格式轻量化在数据存储的重要性分析三维模型3DTile格式轻量化在数据存储中占有重要地位。随着科技的不断发展,尤其是空间信息科技的进步,人们对于三维地理空间数据的需求日益增长。然而,这类数据通常具有大尺度、高精度等特点,因此数据量巨大,给数据存储带来了巨大的挑战。以下是进行3DTile格式轻量化在数据

流数据湖平台Apache Paimon(二)集成 Flink 引擎

文章目录第2章集成Flink引擎2.1环境准备2.1.1安装Flink2.1.2上传jar包2.1.3启动Hadoop2.1.4启动sql-client2.2Catalog2.2.1文件系统2.2.2HiveCatalog2.2.3sql初始化文件2.3DDL2.3.1建表2.3.2修改表2.4DML2.4.1插入数据

流数据湖平台Apache Paimon(三)Flink进阶使用

文章目录2.9进阶使用2.9.1写入性能2.9.2读取性能2.9.3多Writer并发写入2.9.4表管理2.9.5缩放Bucket2.10文件操作理解2.10.1插入数据2.10.2删除数据2.10.3Compaction2.10.4修改表2.10.5过期快照2.10.6Flink流式写入2.9进阶使用2.9.1写入

6.1 使用scikit-learn构建模型

6.1使用scikit-learn构建模型6.1.1使用sklearn转换器处理数据6.1.2将数据集划分为训练集和测试集6.1.3使用sklearn转换器进行数据预处理与降维1、数据预处理2、PCA降维算法代码scikit-learn(简称sklearn)库整合了多种机器学习算法,可以帮助使用者在数据分析过程中快速建

热文推荐