【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

会写动画的前端才是好开发(一)

  • 2020-01-07
  • 本文字数:1349 字

    阅读完需:约 4 分钟

会写动画的前端才是好开发(一)

动画是通过把某一动态过程分解后,画成许多动作瞬间的画幅,再用摄影机连续拍摄成一系列画面,给视觉造成连续变化的图画。它的基本原理与电影、电视一样,都是视觉暂留原理。医学证明人类具有“视觉暂留”的特性,人的眼睛看到一幅画或一个物体后,在 0.34 秒内不会消失。


利用这一原理,在一幅画还没有消失前播放下一幅画,就会给人造成一种流畅的视觉变化效果。相信很多人都看过动画片,或者手翻书,其实它们与电视、电影的原理都是一样的。



动画如何实现


  1. Javascript 直接实现动画;

  2. css3 动画中的 transition 和 animation;

  3. Canvas 动画;

  4. SVG(可伸缩矢量图形);

1. Javascript 直接实现动画

Javascript 直接实现动画,主要是通过 setInterval 或 setTimeout 方法的回调函数来持续调用改变某个元素的 CSS 样式以达到元素样式变化的效果,或者使用 requestAnimationFrame;


示例:



上面示例的效果是一个灰色的小方块,慢慢的从左边,移动到屏幕右边的动画,每隔 16ms 就把方块的左外边距增加 1px。尽管过程看起来很连贯,但是这种方法依然存在一些问题。


因为 JavaScript 是单线程的,setTimeout 是异步操作,加入任务队列后,当 js 引擎线程中同步代码执行完才会从任务队列中取出执行,可能发生阻塞。另外 setTimeOut 会导致页面频繁性重排重绘,消耗性能,一般应该在桌面端浏览器,而且不同浏览器对 setTimeOut 的解析也是不同的,导致同一动画在不同浏览器下效果不一致,在移动端上使用会有明显的卡顿。


requestAnimationFrame 实现动画的优点是可以避免不必要的过度重绘,但是整体性能和可调节性都不如 css3 动画。

2. css3 实现动画

Transition


Transition 可以实现过渡动画的效果,但是 transition 并不能实现独立的动画,只能在某个标签元素样式或状态改变时进行平滑的动画效果过渡,而不是马上改变。 transition 抓住了所设置变化属性的起始态和完成态,通过设定的速度曲线来完成动画,不支持自定义中间的状态。可以设置发生变化的 css 属性,默认为 all,则所有变化的属性都会在触发时,以动画的形式展现出来。如果把 transition 和 transform 配合使用,对元素进行平移、倾斜、缩放,使动画更加丰富生动。


transition 语法如下:


transition:property duration timing-function delay;


具体属性值介绍如下:



示例:



Animation


Animation 算是真正意义上的 CSS3 动画。使用 animation 属性制作动画可以更加灵活的设置动画,通过对关键帧及其状态以及循环次数的控制,页面元素会在对应的时间按照设定好的样式改变进行平滑过渡。不过区别于 Transition,Animation 作用于元素本身而不是样式属性,不局限于只有初始状态和结束状态,可以实现更自由的动画效果。


animation 语法如下:


animation: nameduration timing-function delay iteration-count direction;


具体属性值介绍如下:



关键帧定义:



示例:


大风车


华语群星 - 央视“启航 2016”跨年晚会



感兴趣的小伙伴请看这里(如无法打开,请复制链接到浏览器):


http://www.cnblogs.com/yingzi1028/p/7768595.html


使用 CSS3 transition 和 animation 实现动画,它最大的优势是摆脱了 js 的控制,并且能利用硬件加速以及实现复杂动画效果,但是会存在浏览器兼容性问题。


本转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/iFs4d7XDcoLA3ZweWMpdwQ


2020-01-07 15:40920

评论

发布
暂无评论
发现更多内容

封装一个jQuery的$方法

空城机

JavaScript jquery 大前端 4月日更

尤雨溪:Vue 3 将不会支持 IE11 了

清秋

翻译 Vue 4月日更 IE

Python基础之:Python中的内部对象

程序那些事

Python Python3 程序那些事

Git 技巧11条,离大神又进了一步,嘿嘿

Java小咖秀

git 程序员 开发工具

架构实战营模块1作业

季节风myy

通俗易懂数仓建模—Inmon范式建模与Kimball维度建模

五分钟学大数据

数据仓库 维度建模 4月日更 范式建模

京东云智臻链开源两周年,JD Chain领跑国内自研区块链技术

京东科技开发者

区块链

硬核图解红黑树并手写实现

Silently9527

Java 数据结构与算法 红黑色

架构实战营 模块一 为何架构设计能力难以提升

9527

智慧政务,区块链电子证照平台的解决方案

13828808769

#区块链#

Thrift 学习笔记

U2647

Thrift 4月日更

Kubernetes中的CI/CD

倪朋飞

Kubernetes DevOps CI/CD

区块链药品防伪溯源平台搭建,区块链防伪溯源的解决方案

13828808769

#区块链#

第 0 期架构训练营模块 1 作业

架构实战营

「架构实战营」作业#1

高亮

「免费开源」基于Vue和Quasar的crudapi前端SPA项目实战—环境搭建 (一)

crudapi

Vue nodejs crudapi quasar SPA

Rust从0到1-所有权-切片类型

rust slices 切片

LiteOS内核源码分析:任务LOS_Schedule

华为云开发者联盟

操作系统 函数 LiteOS 调度 LOS_Schedule

图尔兹与达梦数据库达成全面战略合作,共筑国产数据库新生态

BinTools图尔兹

数据库 数据安全 操作数据库

文字变图片——GitHub 热点速览 v.21.14

HelloGitHub

GitHub 开源

区块链农产品质量安全溯源平台--全流程上链

13530558032

Ubuntu 鼠标手势软件 -- EasyStroke

TroyLiu

Linux ubuntu 效率 快捷键 鼠标手势

生活中的这些难题,数据库开发者可为你解决!

华为云开发者联盟

数据库 开发者 华为云 GaussDB(for Redis) Redis Stream

【架构实战营】第1模块作业

swordman

架构实战营

区块链医药溯源解决方案--助力药品溯源

13530558032

【LeetCode】删除有序数组中的重复项 IIJava题解

Albert

算法 LeetCode 4月日更

Baas是什么?区块链Baas平台开发解决方案带你知晓

源中瑞-龙先生

区块链 开发 解决方案 Baas

联邦查询引擎Presto源码编译与调试

小舰

源码剖析 presto 4月日更

Python OpenCV 美女换装,图像处理取经之旅第 19 天

梦想橡皮擦

Python OpenCV 4月日更

Pod 的状态

耳东@Erdong

容器 4月日更

浅谈一个优秀的 Android SDK 需要具备哪些要点

神策技术社区

android 数据采集 sdk 神策数据

会写动画的前端才是好开发(一)_语言 & 开发_Think体验设计_InfoQ精选文章