HTML5中最受开发者期待的一项新特性莫过于Canvas(画布)元素了。Canvas元素提供了一个可以动态渲染图形和位图的位图画布。它非常类似于Flash中的Bitmap和BitmapData两个类。
但是,要使用Canvas还是有点难度的,特别是如果你还想管理,重绘或者运动图形或图片。与Flash播放器不同的是Canvas没有显示队列或显示个别项目这种概念,它提供一个用于绘图的画布,画什么以及什么时候画都取决于开发者。
Grant Skinner放出了一个名为EaselJS的JavaScript库,视图提供一个类似于Flash的DisplayList API用于简化Canvas的开发工作。虽然这个库目前还在内测阶段,但是却在早期就诶的就支持全部特性。如果你对Canvas感兴趣,那么这将是一个非 常好的起点。
在这篇文章中,我将展示如何使用EaselJS来实现Canvas的动画效果。
下面是一个库中主要类的列表:
- DisplayObject:所有EaselJS中显示元素的抽象基类。包含所有显示元素的公用属性(例如:x,y,角度,x比例,y比例,透明度,阴影等等)。
- Stage:用以包含所有Canvas元素的容器根对象
- Container:可以包含一组对象的容器对象,可以让你把多个对象作为一个组来操作。
- Text:在显示列表的上下文中渲染文本
- Bitmap:按照显示的属性绘制一幅图,一个视频或者画布到画布上
- BitmapSequence:显示运动的或者动态的精灵板()并且提供管理回放和队列的APIs
- Graphics:提供一个简单却又强的绘制适量图形的API
- Shape:在显示列表上下文中通过Graphics Object渲染适量图
现在,在我们开始之前,让我们先看一下你在哪能够用到Canvas对象。Canvas是HTML5标准中的一部分,已经被大多数现代浏览器的最新版本所支持,包括:
Safari
Google Chrome
Opera
FireFox
(IE9业已支持 译者注)
但是,还有一个问题,并且这是个大问题。IE并没有支持Canvas对象(虽然下一个版本会支持)。根据NetMarketShare的数 据,IE6,7,8占据了57%的浏览器市场,是用户最多的一部分。有个叫ExplorerCanvas的项目试图使IE支持Canvas,但是 EaselJS为测试与它的兼容性。当你考虑用Canvas的时候请牢记这点。
现在我们有了一个是哦那个Canvas的好主意,先让我们看一个简单点例子。在示例中,我们将使用EaselJS动态的画一个圆并且移动它穿过画布。这个示例将会展示如何按照类库,介绍一下使用类库的一些基本概念,并且展示如何运动一个图形。
下面是例子
现在让我们看一下代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="author" content="Mike Chambers" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <meta name="copyright" content="Mike Chambers" /> <meta name="robots" content="index,follow" /> <title>TITLE</title> <style> #stageCanvas { background-color:#333333; } </style> <!-- 导入Easel库,下载地址 http://easeljs.com/ --> <script src="scripts/easeljs.js"></script> <script> //检查Canvas在当前浏览器是否支持 //http://diveintohtml5.org/detect.html#canvas if(!(!!document.createElement("canvas").getContext)) { var wrapper = document.getElementById("canvasWrapper"); wrapper.innerHTML = "Your browser does not appear to support " + "the HTML5 Canvas element"; return; } //EaselJS Stage实例包含Canvas元素 var stage; //EaselJS Shape示例我们将做成动画 var circle; //圆的半径 var CIRCLE_RADIUS = 10; //x坐标,当圆离开屏幕的时候 var circleXReset; //EaselJS Rectangle(矩形)实例用于存储Canvas的边界值 var bounds = new Rectangle(); //初始化函数 function init() { //通常这里我们会做一些Canvas的嗅探工作. //浏览http://www.modernizr.com/有个用于HTML5嗅探非常有用的库 //获取Canvas对象的引用 var canvas = document.getElementById("stageCanvas"); //复制画布绑定到边界实例 //注意,如果我们改变了画布的大小,我们需要同时改动这些边界 bounds.w = canvas.width; bounds.h = canvas.height; //pass the canvas element to the EaselJS Stage instance //The Stage class abstracts away the Canvas element and //is the root level display container for display elements. stage = new Stage(canvas); //创建一个EaselJS图形元素用来创建画圆的命令 var g = new Graphics(); //1px的画笔 g.setStrokeStyle(1); //设置画笔颜色, 使用EaselJS //Graphics.getRGB静态方法. //创建了一个透明度为.7的白色 g.beginStroke(Graphics.getRGB(255,255,255,.7)); //画这个圆 g.drawCircle(0,0, CIRCLE_RADIUS); //注意过圆现在并未真正的被画出来 //图形实例只是具有画圆的命令 //它在stage需要渲染的时候才被画出来 //通常在我们调用stage.tick()的时候 //创建一个新的图形实例. 这是一个可以添加到stage中并可以被渲染的显示对象 //Pass in the Graphics instance that we created, and that //we want the Shape to draw. circle = new Shape(g); //初始化x坐标,并初始化 circle.x = circleXReset = -CIRCLE_RADIUS; //设置y坐标 circle.y = canvas.height / 2; //将圆加入到舞台 stage.addChild(circle); //让stage开始渲染 stage.tick(); //添加Tick类的订阅.这会每隔一段时间就调用tick方法 //(就像Flash中的ENTER_FRAME) Tick.addListener(this); } //每隔一定时间被Tick调用的函数 function tick() { //检查图像是否超出了stage的右边界 if(circle.x > bounds.w) { //如果有,则重置 circle.x = circleXReset; } //将圆的x坐标移动10像素 circle.x += 10; //重新渲染stage stage.tick(); } </script> </head> <body onload="init()"> <div width="400" height="300" id="canvasWrapper"> <canvas width="400" height="300" id="stageCanvas"></canvas> </div> </body> </html>
你可以点击这里下载本示例代码。
你可以看到,代码是相当的简单,并且它的结构也非常类似使用Flash中的DisplayList API。
有一些非常重要的地方需要指出。
EaselJS Stage示例包含Canvas元素,并且处理所有的内容什么时候如何渲染。只有当你调用stage.tick()的时候stage才渲染,并且为了效率方面的考虑,你仅需要在有内容发生更改或者需要重绘画布的时候再调用这个方法。
Tick类用于处理时间管理。当任何一个观察者对象被通知的时候它将调用一个tick方法。这与ActionScript中的ENTER_FRAME事件类似。
如果你改变了画布的大小,它的内容会被清空。然而,如果你使用EaselJS,唯一你需要做的就是在改变画布大小后调用stage.tick()方法,然后画布会重新渲染。
由于IE缺乏对Canvas的支持,你探测浏览器是否支持Canvas的工作变得非常重要,你最好给用户一个可以接受的回落。上面的示例代码中有简 单的示范,同样你也可以使用Modernizr JavaScript Library这个库,这个库提供了检查浏览器对HTML5特性支持的API。
最后,当前版本是一个早期版本,因此APIs有可能发生改变。另外,有些你期望能用的内容可能尚未支持。例如,当前还没有能够获取一个显示对象高度或宽带的方法(你可能自己已经发现了)。然而不管怎么样,这个库还是非常健壮的,并且已经应用到一下产品级的项目中了。
下面是一些可能对你开始通过EaselJS使用Canvas有用的资源:
- EaselJS Homepage
- EaselJS API Docs
- Modernizr JavaScript Library (for detecting support for HTML5 features).
- Canvas Element Draft Specification
- Canvas Element (Wikipedia)
- Let’s call it a draw(ing surface) Good introduction to the low level Canvas API.
- HTML5 Browser Support Matrix
- HTML5 and CSS3 Readiness
- HTML5 Support in your Browser
转载请注明原文出处《HTML5 Canvas和EaselJS入门(译)》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。
相关推荐
EaselJS是基于HTML5 Canvas的一个JavaScript库,它为Canvas提供了一个更加高级、易于使用的API,使得动画制作和图形操作变得更加简单。 在HTML5 Canvas上制作流程图,首先我们需要理解Canvas的基本概念。Canvas是一...
HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas...
这个源码示例对于学习HTML5 Canvas和EaselJS的开发者来说,是一个很好的学习资源,可以帮助他们理解如何创建复杂的交互式动画效果。通过分析和实践这个源码,你可以掌握更多的HTML5图形编程技巧,提升自己的前端开发...
HTML5 Canvas 初级入门教程 HTML5 Canvas 是 HTML5 中一个非常重要的功能,它允许开发者在浏览器中绘制图形,而不需要使用任何插件。这个功能可以在所有现代浏览器中使用,包括 Internet Explorer 9、Safari 3、...
《HTML 5 Canvas基础教程》从HTML5和JavaScript(以及jQuery)的基础知识讲起,全面介绍了HTML5Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复画布状态,以及变形、合成、处理图像和视频等,让...
html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的...
HTML5 Canvas是一个强大的Web图形API,它允许开发者在网页上直接绘制图形,创建动态和交互式的视觉效果。这个"一个基于html5 canvas的流程图demo.zip"文件很可能包含了一个使用HTML5 Canvas技术实现的流程图示例项目...
这涉及到HTML5的Media API和Canvas API的结合使用,使得视频内容能够在Canvas元素上呈现。 首先,HTML5的`<video>`标签引入了在网页上嵌入视频的能力,它提供了控制视频播放、暂停、音量调整等功能。例如,创建一个...
《HTML5 Canvas基础教程》从HTML5和JavaScript(以及jQuery)的基础知识讲起,全面介绍了HTML5 Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复画布状态,以及变形、合成、处理图像和视频等,让...
资源名称:HTML5 Canvas基础教程内容简介:《HTML5 Canvas基础教程》从HTML5和Javascript(以及jQuery)的基础知识讲起,全面介绍了HTML5 Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复...
这个代码压缩包可能包含上述各种功能的实例代码,你可以通过学习和运行这些代码来加深对HTML5 Canvas的理解,并应用于实际项目中。通过实践,你可以掌握如何创建动态图表、游戏、图像编辑器等复杂交互式Web应用。
CANVAS元素则是HTML 5新增的一个用于绘制图形的HTML元素,它通过JavaScript的API可以实现复杂的动画、游戏图形和其他视觉效果。 在描述中,虽然重复了标题的文本,但是我们可以推断出这本书的重点在于通过实际的...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图像处理,包括绘制、修改和操作图像。在HTML5 Canvas中,我们可以通过JavaScript API实现图片的压缩功能,这对于优化网页性能,尤其是处理...
HTML5 canvas 是一种在网页上绘制图形的API,它允许开发者通过JavaScript动态创建和修改二维图形,从而实现丰富的视觉效果。在这个"HTML5 canvas仿屏保动态管道"项目中,我们利用canvas元素来模仿经典的Windows屏保...
《HTML5 Canvas 开发详解》第二版pdf 版
在使用html2canvas之前,先了解一下其基本属性和使用方法是十分必要的。html2canvas接受一个HTML元素作为参数,这个元素可以是整个页面,也可以是页面的一部分。通过调用html2canvas()函数,并传入对应的HTML元素,...
这个“HTML5 Canvas 教程 pdf中文版 天涯浪子”资源显然是一份专为初学者和进阶者设计的指南,旨在帮助他们理解和掌握Canvas的使用技巧。 在Canvas中,你可以创建各种复杂的图形,如2D图表、游戏场景、动画,甚至是...
尽管如此,Canvas API 还是被纳入HTML5规范,因为它的性能和实现的简便性弥补了不可缩放的不足。 在HTML页面中,使用<canvas>标签可以创建一块矩形区域,这块区域就是Canvas元素。默认大小是宽300像素、高150像素,...
这个游戏不仅展示了HTML5 Canvas的技术潜力,也为学习者提供了一个很好的实践案例,通过研究源代码,可以深入了解Canvas的绘图和游戏开发原理。同时,这个小游戏也表明,HTML5 Canvas不仅可以用于复杂的可视化应用,...