当前位置: 首页 > news >正文

CSS从入门到精通——动画:CSS3动画执行次数和逆向播放

目录

任务描述

相关知识

动画执行次数

动画反向播放

编程要求

任务描述

本关任务:用 CSS3 实现loading效果。效果图如下:

相关知识

为了完成本关任务,你需要掌握:1.动画执行次数,2.动画反向播放。

需要实现的效果如下:

动画执行次数

动画从开始到结束(0%100%)称为一个动画的周期,也就是说,动画执行了一次。

基本的结构如下(这里省略了部分样式):

<div class="box"><span>0%</span><span>100%</span>
</div>
.box{ width: 0px;}

效果图如下:

先创建一个动画名称为progress的动画。代码如下:

@keyframes progress{0% { width: 0px; }100%{ width: 300px; }
}

然后把这个动画绑定到class="box"元素上就可以了。代码如下:

.box{animation: progress 2s ease;
}

效果图如下:

可以看出,这里动画只执行了一次。如何让它执行多次呢?这里用到animation-iteration-count属性,它的值有:

  • n, 表示动画播放次数的数值;
  • infinite,表示动画无限次播放;

这里先执行3次,代码如下:

.box{animation: progress 2s ease 3;
}

效果如下:

动画反向播放

上面进度条从100%0%时是直接消失的,怎么让它逐渐消失呢?

第一种思路:把从0%100%100%0%看作动画的一个周期。这时总完成时间就会翻倍

实现代码如下:

@keyframes progress{0% { width: 0px;}50%{ width: 300px;}100%{ width: 0px;}
}
.box{animation: progress 4s ease;
}

效果如下:

因为这里的动画比较简单,这样写没什么问题。但动画效果比较复杂时,需要计算的东西就比较多了,也比较麻烦。

第二种思路:利用属性animation-direction,它规定了动画是否在下一周期逆向播放。它的值有:

  • normal,默认值,表示正常播放;
  • reverse,表示动画反向播放;
  • alternate,动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放;

可以利用animation-direction: alternate; 让动画第二次反向播放。

实现代码如下:

.box{animation: progress 2s ease 3 alternate;
}

效果如下:

注意:alternate这个值在 动画次数≥2 的时候才有效果;

编程要求

根据提示,在右侧编辑器补充代码,实现loading效果。要求如下:

  • 动画名称为loading
  • 动画一次完成的时间:外面的为1s,里面的为1.5s
  • 动画的速度曲线为linear;
  • 动画完成的次数为 无限次;
  • 外面的顺时针旋转,里面的逆时针旋转;

提示:

  • animation-direction: reverse;可以实现动画反向播放;
  • 注意动画简写的顺序;

为了方便评测, CSS 都是需要以分号;结尾的。

效果如下:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>*{margin: 0;padding: 0;}@keyframes loading{0%{ transform: rotate(0deg); }100%{ transform: rotate(360deg); }}.box{position: relative;width: 100%;height: auto;background: black;}.big{width: 40px;height: 40px;border: 5px solid red;border-radius: 50%;border-color: red red transparent transparent;position: absolute;left: 100px;top: 100px;/************ Begin **************/animation:loading 1s linear infinite;/************* End ***************/}.small{width: 20px;height: 20px;border: 5px solid red;border-radius: 50%;border-color: transparent transparent red red;position: absolute;left: 110px;top: 110px;/************ Begin **************/animation:loading 1.5s linear infinite reverse;/************* End ***************/}</style>
</head>
<body><div class="box"><div class="big"></div><div class="small"></div></div>
</body>
</html>

 

相关文章:

  • 中间件复习之-分布式存储系统
  • C#防止多次注册事件
  • 学习笔记——网络管理与运维——SNMP(SNMP版本)
  • uniapp如何实现跳转
  • GenICam标准(六)
  • MySQL的三种重要的日志
  • Vue3 和 Vue2 对比分析及示例代码解析(初级)
  • Python **运算符(python**kwargs:参数解包)(kwargs:keyword arguments)
  • 10:Hello, World!的大小
  • 小程序无法调用服务端问题排查
  • uniapp地图自定义文字和图标
  • c++编程(17)——deque的模拟实现(1)迭代器篇
  • vuex是什么?如何使用?使用他的功能场景?
  • [大模型]XVERSE-MoE-A4.2B Transformers 部署调用
  • 大数据同步方案怎么选,才能提高企业的业务效率?
  • ES6指北【2】—— 箭头函数
  • SegmentFault for Android 3.0 发布
  • ECMAScript6(0):ES6简明参考手册
  • exports和module.exports
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JAVA并发编程--1.基础概念
  • js面向对象
  • laravel 用artisan创建自己的模板
  • laravel5.5 视图共享数据
  • linux学习笔记
  • MySQL几个简单SQL的优化
  • Terraform入门 - 3. 变更基础设施
  • Vue.js 移动端适配之 vw 解决方案
  • vue:响应原理
  • 电商搜索引擎的架构设计和性能优化
  • 好的网址,关于.net 4.0 ,vs 2010
  • 前端
  • 日剧·日综资源集合(建议收藏)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 学习HTTP相关知识笔记
  • 一个SAP顾问在美国的这些年
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $().each和$.each的区别
  • $GOPATH/go.mod exists but should not goland
  • (1)bark-ml
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (三)模仿学习-Action数据的模仿
  • (四)Android布局类型(线性布局LinearLayout)
  • (算法)Travel Information Center
  • (一)基于IDEA的JAVA基础12
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)菜鸟学数据库(三)——存储过程
  • (转)大型网站架构演变和知识体系
  • .NET CLR基本术语
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net分布式压力测试工具(Beetle.DT)
  • .NET企业级应用架构设计系列之应用服务器