前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >回顾css的animation属性

回顾css的animation属性

作者头像
异名
发布于 2020-12-18 07:15:39
发布于 2020-12-18 07:15:39
97600
代码可运行
举报
文章被收录于专栏:异名异名
运行总次数:0
代码可运行

异名新接一个需求,实现一个文字的切换,结果发现太久没写css动画,对animation属性已经很陌生,尤其是对steps()函数的理解已经丢掉了。

animation 属性概览

animation相关的属性比较多,异名看到自己前几年学习这个属性的时候做的导图,发现这确实是一种很棒的归纳方式,不应该丢掉,就趁着周末的时间review了一下,在以前的基础上做了一些修正,也新增了一些有待以后填补的坑,比如动画的性能优化等,这里就不做展开了,想要获取的源文件的朋友直接在公众号回复animation即可。

xmind

实现文字渐变切换

文字渐变切换

因为动效是比较简单的两条文案循环切换,所以也没让设计师出动效图,这里给出两种实现方式。

方式一就是使用js监听animationiteration事件,动态切换文案

animationiteration

方式二就是利用animation-delay打个时间差,但是这种做法其实很不直观,因为得去算两个item之间的时间差,以及在关键帧中定义过渡的百分比,这些都是很不好维护的

animation-delay

理解和应用steps函数

设计师同学认为上面的文字渐变切换的表现很怪异,有种拖泥带水的感觉,设计师要求文字切换的时候”硬切“。这种时候如果用js动画的话就很好办了,一个定时器回调改变文案就行,但是因为使用场景的问题,我并不希望在这里维护一个定时器,而恰好timing-function中提供了步进函数steps。要应用steps函数需要理解两点,一个是steps中的start和end的区别,另外一个是step步长和keyframes中的关键帧的关系。

start和end之间的关系其实通过步进的函数图像就能够区别开:「start其实是舍弃了第一帧,保留了最后一帧;end是保留第一帧,舍去最后一帧」,而step-start和step-end则分别是steps(1, start)和steps(1, end)的缩写。

step-function

接下来是理解steps和keyframes中的关系,这个就完全是一个定义的问题了,「steps作用于每一个关键帧之间」。比如下面的demo,可以看出0%-50%之间和50%到100%之间都被拆分成了两步

steps-demo

异名还发现有些人会习惯性地省略掉steps的第二个参数,直接steps(1) ,翻阅MDN文档我们知道这是错误的写法,第二个参数不是可选参数,只不过浏览器帮大家做了一下兼容,不传第二个参数也能正常运行,但是我们自己写的时候要避免这种写法。

弄清了这两个小概念之后,再回到需求当中,两句文案的切换其实只需要做个交替切换步进函数即可,代码和效果如下

文字步进切换

一些很棒的效果实践

animation除了实现常见的宽高、渐变、位移等动画,其实也可以作用在很多不同的属性上,能够实现一些很棒的动画效果。这次翻到了以前的笔记和博客,也分享一下当初写过的效果

实现帧动画

帧动画有两种方式,一种是直接切换背景图,一种是把所有帧放在一张平铺的精灵图上面,然后通过position的变化来实现帧的变化,一般我们都会使用后者,因为多张散图的初次加载会导致动画的闪烁,这里演示就直接切换背景图了。因为我们知道step-endstep-start会分别省略第一帧和最后一帧,所以如果要让逐帧动画的所有帧都展示,我们需要结合填充模式animation-fill-mode 把首帧和未帧的显示分别交给forwardsbackwards

framesAnim

实现路径动画

svg的部分属性也是能够做动画变化的,比如下面实现的这个logo的描边就是很棒的一个效果

svgAnim

首先在AI中把logo导入,然后钢笔勾勒logo的轮廓路径,一般交给设计同学帮忙就行,勾勒完路径之后就导出为svg,这一步主要是要获取logo的path。然后结合stroke-dasharraystroke-dashoffset 两个属性实现描边的效果,其中stroke-dasharray 是把线条断开,而stroke-dashoffset 是设置线条的偏移,我们只要在动画中动态设置偏移值就行,path有点大这里也不贴了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
svg {
  stroke-dasharray: 800;
  stroke-dashoffset: 1000;
  animation: line 2s forwards;
}
@keyframes line{
  from { stroke-dashoffset: 1000; opacity: 1; }
  to{ stroke-dashoffset: 0; opacity: 0; }
}

pathAnim

实现3D动画

这个是结合perspective和transform来实现3d的效果。通过 -webkit-perspective:1000px;transform-style: preserve-3d; 来设置3d的视角深度和子元素的3d继承关系,然后通过设置XYZ轴上的rotate和translate固定盒子的六个边,然后在盒子上加上一个rotate3d的动态变化。

3dAnim

一些好的反馈

在刚入门的时候异名非常喜欢花时间来琢磨动画,工作时间长了之后就发现在业务的绝大部分场景中仅仅只是需要一些简单的位移、渐变效果,一些组件库甚至都会把这些简单的动画封装起来了,慢慢的一些属性和实践的问题就会被遗忘,再次遇到复杂动画场景的时候就再去翻一下MDN的文档,百度和掘金上搜一搜。

但是异名这次的体验就很不一样,异名想起了当初写的博客,翻一下网盘甚至还发现了当初梳理的脑图,我能快速捡起当初对这个知识点的认知,快速定位到我要去使用哪些属性,以前写过的那些特效还重新唤起我css动画的兴奋,这个过程太美妙了~

而且就在上周,异名还收到了一个博客园的消息推送,五年前写的小demo到现在还有人在看,而且还能有所收获,这真是幸福感满满的!

我觉得这大概就是写博客的价值所在,一个是作为自己以后查阅和复习的依据,一个是分享,当其他小伙伴遇到和你一样的场景的时候,也能从你的文字中借鉴到一些经验。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 异名 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【效果高能】你不知道的 Animation 动画技巧
在大多数需求中,css3 的 transition / animation 都能满足我们的需求,并且相对于 js 实现,可以大大提升我们的开发效率,降低开发成本。
一只图雀
2020/11/03
1.6K0
【效果高能】你不知道的 Animation 动画技巧
CSS魔法堂:更丰富的前端动效by CSS Animation
 在《CSS魔法堂:Transition就这么好玩》中我们了解到对于简单的补间动画,我们可以通过transition实现。那到底多简单的动画适合用transtion来实现呢?答案就是——我们只需定义动画起始和结束帧的状态的动画。一旦关键帧数大于2时,我们必须转向CSS Animation了。本文为这段时间学习的记录,欢迎拍砖。
^_^肥仔John
2018/07/10
1.4K1
线条之美,玩转SVG线条动画
通常来说web前端实现动画效果主要通过下面几种方案: 1. css动画: 利用css3的样式效果可以将dom元素做出动画的效果来。 2. canvas动画: 利用canvas提供的API,然后利用清除-渲染这样一帧一帧的做出动画效果。 3. svg动画: 同样svg也提供了不少的API来实现动画效果,并且兼容性也不差,本文主要讲解一下如何制作svg线条动画。
Javanx
2019/09/05
2K0
线条之美,玩转SVG线条动画
巧用 CSS 实现动态线条 Loading 动画
所以,这里的的难点也就转变为了,如何动态的实现弧形线段的长短变化?解决了这个问题,也就基本上解决了上述的线条变换 Loading 动画。
Sb_Coco
2022/03/10
1.1K0
巧用 CSS 实现动态线条 Loading 动画
前端动画实现笔记
动画:动画是通过快速连续排列彼此差异极小的连续图像来制造运动错觉和变化错觉的过程。
赤蓝紫
2023/01/02
1.6K0
前端动画实现笔记
animation
因为渲染引擎可以通过跳帧(frame-skipping)及其它技术来确保性能尽量流畅
ayqy贾杰
2023/03/15
1.1K0
animation
一个栗子带你上手CSS3动画
本篇文章介绍CSS动画的各种知识, 补间动画,逐帧动画,动画原则, 并且通过一个实际例子彻底理解CSS动画.
winty
2020/02/25
5600
【动画进阶】巧用 CSS/SVG 实现复杂线条光效动画
简单而言,就是线条沿着不规则路径的行进动画,其中的线条动画可以理解为是特殊的光效。
Sb_Coco
2024/05/07
8880
【动画进阶】巧用 CSS/SVG 实现复杂线条光效动画
CSS3 animation steps介绍
steps()有一定的学习难度,总是搞不清楚,最主要就是start和end傻傻分不清楚。我这里自我挑战下,看看能不能说清楚。
javascript.shop
2019/09/04
9240
CSS3 animation steps介绍
「css基础」Transforms 属性在实际项目中如何应用?
关于Transform变形属性大家都不陌生吧,可以通过此属性实现元素的位移translate(x,y),缩放scale(x,y),2d旋转rotate(angle),3d旋转rotate3d(angle),倾斜变换skew(x-angle,y-angle)等,你也许已经很熟悉了这些属性,或许你也会有这样的困惑,这些属性在实际项目中如何应用呢?
前端达人
2019/07/21
2.6K0
「css基础」Transforms 属性在实际项目中如何应用?
SVG 路径动画简易指南
任何有开发经验的前端工程师都会考虑到不成体系的设备生态所带来的挑战。设备间不同的屏幕尺寸、分辨率和比例使得产品难以提供一致的体验,对于那些对产品有着像素级完美追求的人这种体验差异尤其显著! SVG(可缩放的矢量图形)完美地解决了上文中提到的部分问题。尽管 SVG 有它的局限性,但是在某些场景下是非常有用的,如果你有一个好的设计团队,你也可以基于SVG创建一些震撼的视觉体验,而不必担心给浏览器带来过重的渲染负担或阻碍页面的加载时间。
疯狂的技术宅
2019/03/27
3.6K0
SVG 路径动画简易指南
初窥 SVG Path 动画
本文主要介绍了如何使用 SVG Path 实现绘制可循环播放的动画,包括动画的起点、终点和循环路径,以及如何使用 CSS3 的 keyframes 和 animation 实现动画效果。同时,还介绍了一些 SVG Path 的常见属性,包括 stroke-dasharray、stroke-dashoffset 等,以及如何通过修改这些属性来实现动画效果。
IMWeb前端团队
2017/12/29
2.9K0
初窥 SVG Path 动画
前端面试CSS相关(二)
如何实现一个loading动画; 要求: 用css或svg实现一个loading动画; 本文完整源代码地址:https://gitee.com/duanweidong/interview-question-code.git html结构(css) <div class="loading-block"> <div class="loading-part"></div> <div class="loading-part"></div> <div class="loading-p
用户7572539
2022/11/21
2110
手把手教你实现「京喜工厂」的CSS动画效果
今年Q1(2020年第一季度)参与了京喜事业部「京喜工厂」业务的前端开发。用户可以通过「京喜工厂」参与口罩、抽纸、大米等商品的“在线生产”,既能趣味造物,又能免费领奖品。目前可以通过「京喜」小程序首页访问该活动。
WecTeam
2020/05/21
1.5K0
奇思妙想 CSS 文字动画
本文将会和这篇 -- CSS 奇思妙想边框动画类似,讲一些文字效果,利用不同的属性搭配,实现各式各样的文字动效。
Sb_Coco
2021/03/11
3.5K0
奇思妙想 CSS 文字动画
CSS3过渡与动画
   增强页面渲染性能,提前通知浏览器元素将要做什么动画,让浏览器提前准备合适的优化设置
Leophen
2019/08/23
7960
SVG 线条动画基础入门知识
1、CSS3 动画 2、javascript 动画(canvas) 3、html 动画(SVG)
Javanx
2019/09/04
2.9K0
SVG 线条动画基础入门知识
【Web动画】SVG 线条动画入门
通常我们说的 Web 动画,包含了三大类。 CSS3 动画 javascript 动画(canvas) html 动画(SVG) 个人认为 3 种动画各有优劣,实际应用中根据掌握情况作出取舍,本文讨论
Sb_Coco
2018/05/28
2.3K0
【动画进阶】当路径动画遇到滚动驱动!
在一年前,我介绍了 CSS 中非常新奇有趣的一个新特性 -- @scroll-timeline:革命性创新,动画杀手锏 @scroll-timeline。
Sb_Coco
2023/09/15
6220
【动画进阶】当路径动画遇到滚动驱动!
前端动效讲解与实战
本文将从各个角度来对动画整个体系进行分类,并且介绍各种前端动画的实现方法,最后我们将总结在实际开发中的各个场景的动画选择方案。
2020labs小助手
2022/09/26
2.7K0
相关推荐
【效果高能】你不知道的 Animation 动画技巧
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文