QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

    阅读完需:约 4 分钟

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

3. canvas 动画

canvas 作为 H5 新增元素,是页面图形绘制的容器,借助 Web API 来实现动画的。通过 getContext()获取元素的绘制对象,通过 clearRect 不断清空画布并在新的位置上使用 fillStyle 绘制新矩形内容实现页面动画效果。


示例:(请点击图片查看大图)



上面的例子画出了一幅 1000*600,淡蓝色背景有动态下雪效果的图片,其中一帧如下图所示:



canvas 的主要优势是可以应对页面中多个动画元素渲染较慢的情况,完全通过 javascript 来渲染控制动画的执行,可用于实现较复杂动画。同样都是使用编码的方式由前端开发工程师完成动画效果,canvas 要比原生 js 效率高的多,流畅的多能够轻松的实现更多的动画效果。


canvas 的缺点是没有提供为其内部元素添加事件监听的方法,需要自己动手实现,使其内部元素能够响应事件。首先获得鼠标在 canvas 上的坐标,计算当前坐标在哪些元素内部,然后对元素进行相应的操作。配合自定义事件,我们就可以实现为 canvas 内的元素添加事件监听的效果。

4. SVG 动画

SVG 用来定义用于网络的基于矢量的图形,其使用 XML 格式定义图像,由 SVG 元素内部的元素属性控制。Svg 不依赖分辨率,基于矢量图,支持事件处理,最适合带有大型渲染区域的应用程序。


示例:(请点击图片查看大图)



上面的例子实现的是一个跳动的心的动图,其中一帧如下图所示:


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


https://code.h5jun.com/kul


SVG 的一大优势是含有较为丰富的动画功能,原生绘制各种图形、滤镜和动画,并且能被 js 调用。


但是,另一方面元素较多且复杂的动画使用 svg 渲染会比较慢,CSS3 动画的出现让 svg 的应用变得相对少了。


感兴趣的小伙伴请戳这里(如无法打开,请复制链接到浏览器):https://segmentfault.com/a/1190000008215226


另外,还有在不同框架下,也都有自己实现动画的方法,例如 jQuery 中的 show、slide、fade 以及 animate 方法,或者 angularJs 中的 ngAnimate 通过添加或移除 class,使用预定义的样式类来设置 HTML 元素的动画,或者 animate()方法, 在组件对应的模板上直接加动效,AnimationBuilder, 在自定义指令中给宿主元素加动效。


看到这里大家一定很疑惑,既然实现动效的方法有那么多种,那么对于组件来说,应该如何做选择?


这就要结合组件来看了,首先使用 css3 中 animation 和 transition 实现,这种实现方式除了 IE9 及其以下版本不兼容之外,其他浏览器之下都有很好的兼容性。这种实现方式能够将组件样式与组件动画分离开展示,非常有利于后期维护,对国际化和换肤也是十分友好的。


然后根据情况选择 angular 的 ngAnimate 或者 jQuery 中的.animate()方法,因为这两种方法的使用都是有前提和限制的,并不能实现左右的动画效果。



最后,如果以上方法还不能满足你的需求,那就只能使用 JavaScript 中的 setInterval 和 setTimeOut 方法实现了,在定时器中不断修改某个样式的值,直到达到临界值,实现动画。


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


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


2020-01-07 15:401083

评论

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

大作业2

蓝黑

Java程序经验小结:谨慎的使用本地方法

后台技术汇

28天写作

面试官:换人!赶快换人!连 CopyOnWriteArrayList 都没听过!

xcbeyond

Java 28天写作 CopyOnWriteArrayList

有关架构设计原则的总结

跳蚤

第12周作业

Jack

第七周 学习总结

简简单单

week7-总结

J

堡垒机是什么?

生产环境全链路压测建设历程 25:FAQ 7、8 正常业务保护和外调接口的处理

数列科技杨德华

28天写作

创业也是要帮助他人突破认知 Jan 10, 2021

王泰

28天写作

中华石衫 Elasticsearch 顶尖高手系列课程

escray

elasticsearch elastic 28天写作 死磕Elasticsearch

week7-homework

J

MySQL在按照某个字段分组、排序加序号

AI乔治

Java MySQL 架构

车轱辘话来回说怎么治

Justin

团队协作 沟通 28天写作

4.5万字手把手教你实现MySQL TB级数据存储!!

冰河

MySQL 分布式 微服务 数据存储 mycat

python自学 第一章 初始python

WEB前端修行日志

Python

架构师培训第二周课后作业

跳蚤

HDFS SHELL详解(3)

罗小龙

hadoop 28天写作 hdfs shell

Windows10 Kafka Docker 集群搭建

Docker kafka

Java Kafka 简单示例

Java kafka

新官上任,如何开始你的管理工作(上)

一笑

管理 28天写作

汽油车最简知识——28天写作Day2/28

mtfelix

28天写作 电动汽车

技术人小故事-团队愿景篇-第2段

Ian哥

28天写作

反对没有节制的加班文化

熊斌

管理 职场 工作思路 28天写作

微信视频号的不同 | 视频号28天(03)

赵新龙

28天写作

程序员练习算法的几个实用技巧

Phoenix

算法

MySQL慢查询(下):问题解决,干货总结

架构精进之路

MySQL MySQL 高可用 MySQL优化 28天写作

从大局着眼,立微处发力

张老蔫

28天写作

IDEA@Data注释使用

AI乔治

Java 架构 注解

第七周 性能优化作业

简简单单

架构师系列 13 Spark 大数据处理在金融领域中的应用

桃花原记

会写动画的前端才是好开发(二)_文化 & 方法_Think体验设计_InfoQ精选文章