写点什么

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

  • 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:401065

评论

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

SAP Marketing Cloud Contact 模型的导入配置和数据合并原理

汪子熙

Cloud SAP 云产品 5月月更

详解CVE-2022-0847 DirtyPipe漏洞

华为云开发者联盟

安全 漏洞 splice syscall 内存未初始化

茶饮市场当前情况如何?走入下半场的现制茶战局,又将去向何方?

易观分析

茶饮

首届 FinClip Hackathon 圆满落幕,亚马逊云科技|云服务平台助力获奖团队高速成长

FinClip

亚马逊 finclip FinClip Hackthon

前端路由工作原理与使用

CRMEB

【FinClip 黑客马拉松优秀参赛项目@灰鲸疫情地图】疫情之下,安全出行的一站式解决方案

FinClip

finclip FinClip Hackthon 疫情地图

堡垒机属于什么设备?是网络设备吗?

行云管家

网络安全 服务器 堡垒机 网络设备

用了Scrum越来越累?这三点帮你走出困境

华为云开发者联盟

Scrum 团队 估算 计划会议 需求梳理

零元尝鲜|阿里云 Grafana 商业化服务正式发布

阿里巴巴云原生

阿里云 云原生 Grafana 可观测工具

有奖调研!第四期(2021-2022)传统行业云原生技术落地调研——央国企篇

York

容器 DevOps 微服务 云原生

「深度」国产GPU的“成色”与“现实”

Finovy Cloud

服务器 GPU服务器

Clickhouse:日志表占用大量磁盘空间怎么办?

Ken

Clickhouse 日志表

带你聚焦GaussDB(DWS)存储时游标使用

华为云开发者联盟

sql 数据处理 GaussDB(DWS) 游标 动态游标

FLASK项目动态更新配置的方法

西北望高楼

Python flask

移动端异构运算技术-GPU OpenCL 编程(基础篇)

百度Geek说

后端

天才制造者:独行侠、科技巨头和AI |深度学习崛起十年

OneFlow

人工智能 神经网络 深度学习 DeepMind 开源公司

Android技术分享| Context浅析

anyRTC开发者

android 音视频 WebRTC Context 移动开发

重磅官宣!摩尔线程携手7家核心分销商伙伴共拓GPU市场机遇

科技热闻

Nacos源码系列—订阅机制的前因后果(下)

牧小农

源码 nacos

佬技术总监,是这样优化产线MySQL数据库配置的

梦想橡皮擦

5月月更

“易+”开源计划丨基于标准 WebRTC 低延迟直播开源实践

网易智企

WebRTC 低延时

云计算和运维工程师冲突吗?运维岗需要云计算知识吗?

行云管家

云计算 运维 IT运维 云运维

AI简报:图像超分模型 EDSR+RDN

AIWeker

人工智能 5月月更 超分 AI简报

(win)C、C++处理文件名称

DS小龙哥

5月月更

透过实例demo带你认识gRPC

华为云开发者联盟

spring gRPC 数据编码 请求映射

JSON数据传输大法第一式——用OADate处理日期格式

葡萄城技术团队

json 前端 表格开发 表格 表格技术

谢孟军:中国 Go 语言领军人的创业第五年

腾源会

开源 Go 语言 腾源会 WeOpen Talk

【刷题第13天】剑指 Offer 06. 从尾到头打印链表

白日梦

5月月更

JVM进阶(十四)——初识JAVA 类加载机制

No Silver Bullet

Java 类加载机制 5月月更

typeof和instanceof

源字节1号

当开放服务网格 OSM 遇到 Pipy

Flomesh

Service Mesh 服务网格 SMI OSM

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