首页 > 其他分享 >HTML5 Canvas和EaselJS入门(译)

HTML5 Canvas和EaselJS入门(译)

时间:2023-05-17 19:34:27浏览次数:49  
标签:Canvas canvas 画布 HTML5 EaselJS stage


HTML5中最受开发者期待的一项新特性莫过于Canvas(画布)元素了。Canvas元素提供了一个可以动态渲染图形和位图的位图画布。它非常类似于Flash中的Bitmap和BitmapData两个类。

 

但是,要使用Canvas还是有点难度的,特别是如果你还想管理,重绘或者运动图形或图片。与Flash播放器不同的是Canvas没有显示队列或显示个别项目这种概念,它提供一个用于绘图的画布,画什么以及什么时候画都取决于开发者。

 

Grant Skinner放出了一个名为EaselJS的JavaScript库,视图提供一个类似于Flash的DisplayList API用于简化Canvas的开发工作。虽然这个库目前还在内测阶段,但是却在早期就诶的就支持全部特性。如果你对Canvas感兴趣,那么这将是一个非 常好的起点。

 

在这篇文章中,我将展示如何使用EaselJS来实现Canvas的动画效果。

下面是一个库中主要类的列表:

  1. DisplayObject:所有EaselJS中显示元素的抽象基类。包含所有显示元素的公用属性(例如:x,y,角度,x比例,y比例,透明度,阴影等等)。
  2. Stage:用以包含所有Canvas元素的容器根对象
  3. Container:可以包含一组对象的容器对象,可以让你把多个对象作为一个组来操作。
  4. Text:在显示列表的上下文中渲染文本
  5. Bitmap:按照显示的属性绘制一幅图,一个视频或者画布到画布上
  6. BitmapSequence:显示运动的或者动态的精灵板()并且提供管理回放和队列的APIs
  7. Graphics:提供一个简单却又强的绘制适量图形的API
  8. 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 οnlοad="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有用的资源:

  1. EaselJS Homepage
  2. EaselJS API Docs
  3. Modernizr JavaScript Library (for detecting support for HTML5 features).
  4. Canvas Element Draft Specification
  5. Canvas Element (Wikipedia)
  6. Let’s call it a draw(ing surface) Good introduction to the low level Canvas API.
  7. HTML5 Browser Support Matrix
  8. HTML5 and CSS3 Readiness
  9. HTML5 Support in your Browser


 

标签:Canvas,canvas,画布,HTML5,EaselJS,stage
From: https://blog.51cto.com/u_8895844/6293328

相关文章

  • 使用 HTML5 canvas 进行 Web 绘图
    新的HTML5规范旨在帮助开发人员更轻松的编写出各类Web应用,以顺应当前SaaS,云计算以及RIA等技术的最新趋势。在HTML5得以广泛推广之前,开发人员通常使用SVG,VML等技术进行Web绘图操作,但这些基于XML的绘图语言声明式的绘图方式并不能满足复杂绘图操作在性能上的需求,比如......
  • 使用 HTML5 canvas 绘制精美的图形
    HTML5是一个新兴标准,它正在以越来越快的速度替代久经考验的HTML4。HTML5是一个W3C“工作草案”—意味着它仍然处于开发阶段—它包含丰富的元素和属性,它们都支持现行的HTML4.01版本规范。它还引入了几个新元素和属性,它们适用许多使用web页面的领域—音频、视频、图......
  • ios15使用html2canvas页面白屏、崩溃、自动刷新
    原文链接:https://www.cnblogs.com/yalong/p/17408067.html背景有个H5内嵌App的项目,做分享功能的时候用到了html2canvas,在IOS15(Iphone11pro)上,只要点击分享就会触发页面reload或者直接白屏,把H5链接在手机上用浏览器访问点击分享也不行,会触发浏览器自动刷新,看来就是这个htm......
  • HTML5网页游戏开发
    HTML概述互联网上的应用程序被称为Web应用程序,web应用程序使用Web文档(网页)来表示用户界面,Web文档都遵循html格式,html5是最新的html标准HTML基础HTML是HyperTextMarkupLanguage(即超文本),它是通过嵌入代码或标记代码来表名文本格式的国际标准。它编写的文件扩展名是.htm......
  • 提到Canvas,必须好好唠唠它的图像操作能力
    前情提要接续一下之前对Canvas的探索。本篇分享一下对图像操作的阅读和研究。日常开发中,时常遇到对图像的处理的场景。精美的图像做为背景或者场景,相对会吸引人。Canvas图像API十分强大。可以通过Canvas图像API加载图像数据,进行裁剪、贴图,也可以实现动态的图像合成。来唠唠Canvas图......
  • 提到Canvas,必须好好唠唠它的图像操作能力
    前情提要接续一下之前对Canvas的探索。本篇分享一下对图像操作的阅读和研究。日常开发中,时常遇到对图像的处理的场景。精美的图像做为背景或者场景,相对会吸引人。Canvas图像API十分强大。可以通过Canvas图像API加载图像数据,进行裁剪、贴图,也可以实现动态的图像合成。来唠唠Canvas图......
  • 使用 jQuery Mobile 与 HTML5 开发 Web App (十八) —— HTML5 Web Workers
    本文要介绍的是HTML5的WebWorkers特性,它解决了JavaScript开发中一个重大的问题——在后台运行JavaScript。与本系列前两篇文章介绍的特性相似,WebWordkers似乎也是为了WebApps而设计的,可以想象,WebApps乃至原生Apps受移动设备性能的限制比在桌面环境中要大很多,尽......
  • 使用 jQuery Mobile 与 HTML5 开发 Web App (十七) —— HTML5 离线缓存
    本文要介绍的,是HTML5离线网络应用程序的特性,离线网络应用程序在W3C中的实际名称是"OfflineWebapplications",也称离线缓存。当用户打开浏览器时,浏览器会将一个列表中指定的资源都下载并储存在本地。下次当用户再访问这个网络程序时,浏览器会自动引用本地缓存中相应的文件,而......
  • 分享Python采集88个html5代码,总有一款适合您
    分享Python采集88个html5代码,总有一款适合您Python采集的88个html5代码下载链接:https://pan.baidu.com/s/1wJzpYBlHIGtNgTisJwCQ6Q?pwd=yr96提取码:yr96imgplay-基于canvas的图片序列播放jQuery插件基于HTML5Canvas和Rebound动画的Loading加载动画特效超酷创意分段式SVG文字动画特......
  • tkinter canvas create_window
     您可以使用画布窗口对象将任何 Tkinter 小部件放置在画布上。窗口是一个可以容纳一个 Tkinter 小部件的矩形区域。这小组件必须是与相同的顶级窗口的子窗口画布,或位于相同的顶级窗口。如果要将复杂的多控件对象放在canvas,您可以使用此方法在画布上放置一个小部件,然后......