基于canvas与原生JS的H5动画引擎
前一段时间项目组里有一些H5动画的需求,由于没有专业的前端人员,便交由我这个做后台的研究相关的H5动画技术。
通过初步调研,H5动画的实现大概有以下几种方式:
1、基于css实现
这种方式比较简单易学,但是能实现的效果也相对简单。一般都是对H5元素的平移,旋转,缩放等。适用于网页中的一些简单动画,对于由许多元素相互联系的复杂动画实现起来有些难度。当然也有基于css实现的比较复杂的动画(如:人物的行走),但是难度比较大。css动画教程:http://www.cnblogs.com/tengpan-cn/p/6189720.html
![]() |
![]() |
![]() |
![]() |
2、基于jquery实现
jquery中提供了一些API对H5元素进行操作,主要也是平移、旋转、缩放;还有一些出入效果(如淡入淡出等)。使用起来比较简单,适用场景与css基本相同,在做一些需要和用户交互的简易动画时比css更简单易用些。
3、基于js与canvas实现
canvas是H5提供的一种绘图元素,可以使用JS控制,绘制点、线、面、图像、H5元素等。同时也支持对所绘制对象的平移、旋转、裁剪等,并且绘制速度还是比较快的;在平移,旋转上略有局限性,一方面实现起来并不方便,绘制平移旋转的实质是对画布坐标系进行平移,旋转,绘制完成之后,需要将画布坐标系复原,并且不支持Z轴旋转。
理论上来说基于js与canvas可以做任何形式的动画,但是需要自己去实现很多东西,比如碰撞检测,粒子系统等,这些工作量还是比较大的。有很多热心开发人员写了一些基于js与canvas的动画引擎,实现了相当赞的效果。但这些引擎都有一定的局限性,一方面是由于封装导致各个引擎之间不能配合使用,而各个引擎实现的并不完善,只是侧重与某一方面,有的侧重于碰撞效果,有的侧重与弹性约束之间的物理效果。
![]() |
![]() |
4、基于一些功能比较完善的物理引擎如cocos2d、白鹭等
这种方式就可以做出非常炫的效果,但是需要具备一些物理引擎的基础知识,包括坐标变换等一些数学知识。一般来说这种技术都是一个单独的研究方向,学好了薪资很高的。但使用这种技术做动画一般都是需要一个团队的,有主程、美工等多个专业人员一起做。
通过技术评估及我们的需求,决定采用第三种方式,并且自己结合需求,实现了一个简易的动画引擎。目前开发工作已经初步完成,基于js+canvas的引擎代码已经放置github上(https://github.com/luckyPT/AnimationEngine)。基于该引擎可以方便的实现:
①点线面等简单图形以及图片的绘制API,并且很方便的就可以实现旋转、平移、缩放(解决了原生canvas的部分局限性)
②基于雪碧图,可以很方便的实现序列帧动画
③简易的碰撞检测
④该引擎在封装的时候,考虑了可扩展性,可以很好的扩展其他特性(如重力效果)
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
欢迎转载收藏!!
基于canvas与原生JS的H5动画引擎的更多相关文章
- 基于canvas的原生JS时钟效果
概述 运用html5新增画布canvas技术,绘制时钟效果,无需引用任何插件,纯js. 详细 代码下载:http://www.demodashi.com/demo/11935.html 给大家介绍一个 ...
- 分享一个自己写的基于canvas的原生js图片爆炸插件
DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...
- 原生JS封装简单动画效果
原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...
- 用原生JS写移动动画案例及实际应用
js很强大 相信很多人都知道,那么它有哪些强大之处呢?有兴趣的人可以去查查,这里就不赘述了,因为不在本片文章讨论的范围. 我们要讲的是怎么用原生JS写移动动画?我们先举一个最简单的动画例子,很多网站的 ...
- 原生js判断css动画结束 css 动画结束的回调函数
原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...
- 原生Js封装的动画类
算法用的是Tween类,需要研究的参考这篇文章: http://www.cnblogs.com/cloudgamer/archive/2009/01/06/Tween.html 网页里常用的动画 放大 ...
- 原生js判断css3动画过度(transition)结束 transitionend事件 以及关键帧keyframes动画结束(animation)回调函数 animationEnd 以及 css 过渡 transition无效
上图的 demo 主要讲的 是 css transition的过渡回调函数transitionend事件: css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画 ...
- 原生js及H5模拟鼠标点击拖拽
一.原生js 1.拖拽的流程动作 鼠标按下 触发onmousedown事件 鼠标移动 触发onmousemove事件 鼠标松开 触发onmouseup事件 2.注意事项: 要防止div移出可视框,要限 ...
- 使用原生JS封装一个动画函数
最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...
随机推荐
- Windows中安装Scrapy
在linux中安装Scrapy只需要导入一些非python的支持包,在windows中安装Scrapy则是一波三折. 总之来说,主要分为以下几个步骤,可能由于系统问题(国内个人机子,甚至是小企业的机子 ...
- nyoj677 谍战
本题能够说是最小割入门级题目. 假设能想到是最小割问题.那么建图思路便是水到渠成的事了. 加入一个源点S和汇点T: 把S与每一个间谍相连.容量为无穷大: 把城市N(即飞机场的位置)与汇点T相连.容量为 ...
- 解决erlang R17无法识别中文问题
erlang更新到R17已有一段时间了.公司项目打算从旧版的erlang迁移到R17,却不料有不少的困扰,当中一个问题是中文问题. 这个问题非常easy重现:新建一个文件t.erl.保存为utf-8无 ...
- 【BZOJ2793】[Poi2012]Vouchers 调和级数
[BZOJ2793][Poi2012]Vouchers Description 考虑正整数集合,现在有n组人依次来取数,假设第i组来了x人,他们每个取的数一定是x的倍数,并且是还剩下的最小的x个.正整 ...
- 【BZOJ1823】[JSOI2010]满汉全席 2-SAT
[BZOJ1823][JSOI2010]满汉全席 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只 ...
- Spring 事务机制详解(事务的隔离性和传播性)
原文出处: 陶邦仁 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考. Spring声明式事务让我们从复杂的事务处理中得到 ...
- ehcarts之toolbox,工具栏
toolbox 工具栏.内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具. feature各工具配置项.具体显示功能 1.saveAsImage 保存为图片. 2.restore 还 ...
- 【python】-- Django路由系统(网址关系映射)、视图、模板
Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...
- jq cookie
//$.cookie("xx");//读取xx的值 //$.cookie("xx","123");//设置xx的值为123 //$.cook ...
- Jquery的each遍历数据组成JSON
遍历每个标签的值 html代码: <volist name="parArr" id="item" key="$key"> ...











