【CSS3】CSS3 动画 ⑥ ( 动画属性示例 | 精灵图帧动画效果实现 )

2023-08-10 22:58:18





一、需求说明



给定一张精灵图 , 其中有多个 动画帧 对应的图片 ,

下图的大小是 1600 x 100 像素 , 截图展示如下 :

在这里插入图片描述

实际图片 :
请添加图片描述





二、代码分析




1、动画属性


使用上图实现 逐帧动画 效果 ;

实现逻辑是 设置 元素的 animation-timing-function 动画属性 , 使用 steps(n) 属性值指定动画步长 ;

设置一个盒子模型 , 显示指定的背景图片 ;

上述 精灵图 中 , 有 8 张 熊图片 ,

设置 动画的步长 为 8 , 每个步骤显示一张图片 ,

第一步 , div 盒子模型 显示 精灵图 中的第一张图片 , 作为背景图片 ;

在这里插入图片描述

第二步 , div 盒子模型 显示 精灵图 中的第二张图片 ,
在这里插入图片描述

第三步 , div 盒子模型 显示 精灵图 中的第三张图片 ,
在这里插入图片描述

最后一步 , 也就是第八步 , div 盒子模型 显示 精灵图 中的第八张图片 , 同时也是最后一张图片 ;

在这里插入图片描述


2、布局分析


精灵图 总体大小为 1600 x 100 像素 , 其中每个图的大小为 200 x 100 像素 ,

这里 将 div 盒子模型的大小设置为 200 x 100 像素 , 正好能装下 一帧 图片 ;

div 盒子 显示精灵图 作为背景图片 , 设置 background: url(images/bear.png) no-repeat; 属性即可 ;

布局的属性如下 :

        div {
            /* 绝对定位 */
            position: absolute;
            /* 设置动画的主要作用元素 */
            width: 200px;
            height: 100px;
            /* 设置背景图片 - 精灵图 */
            background: url(images/bear.png) no-repeat;
            animation: run 1s steps(8) infinite, move 4s infinite;
        }

3、动画实现


奔跑动画实现 : 奔跑的逐帧精灵图尺寸为 1600 x 100 像素 , 设置其从左到右作为 200 x 100 像素的盒子模型的背景图片 , 第一帧 位置为 0 x 0 像素 , 最后一帧显示 , 需要将图片向左移动 1600 像素才可以 ;

        @keyframes run {
            /* 定义奔跑动画 精灵图 切换背景动画 */
            0% {
                background-position: 0 0;
            }
            100% {
                background-position: -1600px 0;
            }
        }

从左侧移动到中间的 动画实现 : 直接设置 盒子模型 的 绝对定位 属性 , 初始状态显示在最左侧 , 最终状态 盒子模型 处于中间位置 , 需要先移动到 50% 位置 left: 50%; , 此时盒子模型左侧在中间位置 , 还需要往回走自身的 50% 确保走到中间位置 , 设置 transform: translateX(-50%); 属性即可 ;

        @keyframes move {
            /* 定义盒子模型 从左到右 的 移动动画 */
            0% {
                left: 0;
            }
            100% {
                /* 绝对定位到中间位置 此时盒子模型左侧在中间位置 */
                left: 50%;
                /* 往回走自身的 50% 确保走到中间位置 */
                transform: translateX(-50%);
            }
        }




三、完整代码示例



代码示例 :

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动画属性示例 - 精灵图帧动画效果实现</title>
    <style>
        body {
            background-color: #ccc;
        }
        
        div {
            /* 绝对定位 */
            position: absolute;
            /* 设置动画的主要作用元素 */
            width: 200px;
            height: 100px;
            /* 设置背景图片 - 精灵图 */
            background: url(images/bear.png) no-repeat;
            animation: run 1s steps(8) infinite, move 4s infinite;
        }
        
        @keyframes run {
            /* 定义奔跑动画 精灵图 切换背景动画 */
            0% {
                background-position: 0 0;
            }
            100% {
                background-position: -1600px 0;
            }
        }
        
        @keyframes move {
            /* 定义盒子模型 从左到右 的 移动动画 */
            0% {
                left: 0;
            }
            100% {
                /* 绝对定位到中间位置 此时盒子模型左侧在中间位置 */
                left: 50%;
                /* 往回走自身的 50% 确保走到中间位置 */
                transform: translateX(-50%);
            }
        }
    </style>
</head>

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

</html>

执行结果 :

在这里插入图片描述

更多推荐

[交互]AJAX

[交互]AJAX创建XMLHttpRequest发送请求服务器响应XMLHttpRequestreadyState状态值响应数据请求状态变更回调函数XMLHttpRequeststatus的值常用状态码设置AJAX是技术,不是工具,区别于axios、fetch、$.ajax等(封装工具)现有交互工具,是用于改变部分网页

最佳优先搜索简介

概念:最佳优先搜索算法(Best-FirstSearch)是一种启发式搜索算法,用于在图中找到从起点到目标节点的最佳路径。使用一个优先队列来存储待扩展的节点,优先队列根据节点的启发式评估函数值进行排序。在每次迭代中,算法选择队列中启发式评估函数值最小的节点进行扩展,直到找到目标节点或遍历完所有节点。最佳优先搜索算法用于

什么是智能推荐?智能推荐的原理是什么?

一、智能推荐的魔力2020年的愚人节晚间,罗永浩在抖音带货,相信你也被刷屏了吧。3小时的直播过程中,22款产品轮番出场,最终首播支付交易总额突破1.1亿、整场直播观看总人数超过4800万、总销售件数逾91万,粉丝打赏音浪收入3600万,由此看来,罗老师看起来离“带货一哥”的目标又进了一步。不得不说,这场魔幻版的流量狂潮

如何学习java

带着问题去学?为什么我们debug的时候代码会停在哪一个位置什么是多态?(这个在类的生命周期里面寻找答案)我们学习java就是从代码到成为程序的过程所以这很明显就是我们的编译原理和os打交道这很明白就是操作系统和另一台机器打交道,那么就是计算机网络java指令8个从代码到程序就是从代码到字节码(javap命令可以看到)

七、运算符

运算符1.运算符1.1.赋值运算符1.2.算数运算符1.3.自增和自减运算符1.4.比较运算符1.5.逻辑运算符1.6.位运算符1.6.1.按位与运算1.6.2.按位或运算1.6.3.按位取反运算1.6.4.按位异或运算1.6.5.移位操作1.6.6.复合赋值运算符1.6.7.三元运算符1.6.8.运算符优先级1.7.

Linear Feedback Shift Register

线性反馈移位寄存器(LinearFeedbackShiftRegister,简称LFSR)是一种数字电路设计和密码学中常用的寄存器类型。它是一种简单而高效的方式,用于生成伪随机的二进制序列,并在数据混淆、错误检测和加密等领域中有应用。LFSR通常用于流密码的生成。以下是LFSR的关键特性和组成部分:移位寄存器:LFSR

应用程序接口(API)安全的入门指南

本文简单回顾了API的发展历史,其基本概念、功能、相关协议、以及使用场景,重点讨论了与之相关的不同安全要素、威胁、认证方法、以及十二项优秀实践。根据有记录的历史,随着Salesforce的销售自动化解决方案的推出,首个WebAPI在1990年底出现了。在那个时候,它是一种每个人都可以访问到的开放资源。Salesforc

MySQL常用操作

目录1.安装MySQL/MariaDB2.用户管理2.1用户信息2.2用户权限privileges3.增删改查3.1增删数据库/表3.2查询参考1.安装MySQL/MariaDB#1)确认是否已安装mysqlrpm-qa|grepmysql#2)(如无)执行以下命令进行安装##方法一yuminstallmysql-y#

docker介绍及入门举例

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker的主要优点有:1.提供了一种在任何地方创建、运行和分发应用程序的方法,而不仅仅是在虚拟机

Centos系统常见配置(详细)总结

目录一、简介二、具体内容1、设置静态ip2、重启网络3、ssh登录时自动运行命令4、新增用户并创建家目录5、终端显示bash-4.2#6、更换yum源7、centos系统串口终端自动登陆8、系统启动通过rc.local自动执行脚本9、关闭防火墙10、设置samba三、其他相关链接Ubuntu系统设置常见问题处理详细总结

iOS16新特性:实时活动-在锁屏界面实时更新APP消息 | 京东云技术团队

简介之前在《iOS16新特性:灵动岛适配开发与到家业务场景结合的探索实践》里介绍了iOS16新的特性:实时更新(LiveActivity)中灵动岛的适配流程,但其实除了灵动岛的展示样式,LiveActivity还有一种非常实用的应用场景,那就是锁屏界面实时状态更新:上图是部分已经做出适配的APP,锁屏实时活动的展示。可

热文推荐