本段教程来自于《LYNDA.COM.EASELJS.FIRST.LOOK》
EASELJS是一个JavaScript库,用于在HTML5提供的Canvas对象上绘制图形图像并提供了交互接口,easelJS的目标是成为Flash的替代品,由于其可绘制复杂的图形UI并提供交互接口,无需插件即可在浏览器中运行。下载地址:http://code.createjs.com/。
一个最简单的例子如下:
HTML源代码:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Easel JS Demo</title> <link rel="stylesheet" type="text/css" href="_css/easeljs.css"/> <script type="text/javascript" src="_js/easeljs-0.5.0.min.js"></script> <script type="text/javascript" src="_js/easeljs.js"></script> </head> <body onLoad="init()"> <canvas id="easel" width="480" height="320"> </canvas> </body> </html>
/* CSS Document */ body{ background-color: #999 } #easel{ background-color: #066; display: block; margin: 0 auto; }
// JavaScript Document function init() { var canvas = document.getElementById("easel"); context = canvas.getContext("2d"); SIZE = 100; centerX = canvas.width / 2; centerY = canvas.height / 2; rotation = 0; setInterval(function() { rotation += 8; // 保存对象变形状态 context.save(); context.clearRect(0, 0, canvas.width, canvas.height); context.fillStyle = "rgb(162, 216, 255)"; // 平移 context.translate(centerX, centerY); // 旋转30度,方向为顺时针 // 如果没有平移,旋转顶点为0, 0 // 平移后,旋转顶点为centerX, centerY context.rotate(rotation * Math.PI / 180); context.fillRect(-SIZE / 2, -SIZE / 2, SIZE, SIZE); // 恢复变形状态 context.restore(); if (rotation >= 360) rotation = 0; }, 50); }
使用easelJS的话代码如下:
function init(){ SIZE = 100; var canvas = document.getElementById("easel"); centerX = canvas.width / 2; centerY = canvas.height / 2; // 创建作图的形状对象 var shape = new createjs.Shape(); shape.graphics.beginFill("rgb(162, 216, 255)"); shape.graphics.drawRect(0, 0, SIZE, SIZE); // 设置起点位置,相对于父对象 shape.x = centerX; shape.y = centerY; // 设置注册点,用来指定变形位置 shape.regX = SIZE / 2; shape.regY = SIZE / 2; shape.rotation = 45; // 设置定时器 createjs.Ticker.setFPS(30); createjs.Ticker.addListener(function(){ // 对象旋转 shape.rotation += 8; // 布景刷新 stage.update(); }); // 创建布景对象 var stage = new createjs.Stage(canvas); stage.addChild(shape); stage.update(); }
填充的例子:
function init(){ var canvas = document.getElementById("easel"); // 创建布景对象 var stage = new createjs.Stage(canvas); // 创建图形对象 var graphics = new createjs.Graphics(); // 创建Shape对象 var shape = new createjs.Shape(graphics); // 设置填充色 //graphics.beginFill("purple"); //graphics.beginFill(createjs.Graphics.getRGB(255, 0, 0, .5)); // 渐变色填充 //graphics.beginLinearGradientFill(["yellow", "red"], [0, 1], 50, 50, 150, 150); graphics.beginRadialGradientFill(["yellow", "red"], [0, 1], 100, 100, 0, 100, 100, 100); // 开始绘图 // rect/fillRect/drawRoundRect/drawCircle/drawEllipse/drawPolyStar graphics.rect(50, 50, 100, 100); stage.addChild(shape); stage.update(); }
画笔的例子:
function init(){ var canvas = document.getElementById("easel"); // 创建布景对象 var stage = new createjs.Stage(canvas); // 创建图形对象 var graphics = new createjs.Graphics(); // 创建Shape对象 var shape = new createjs.Shape(graphics); // 设置画笔 //graphics.beginStroke("red"); //graphics.beginLinearGradientStroke(["red", "green"], [0, 1], 50, 50, 250, 250); graphics.beginRadialGradientStroke(["red", "green"], [0, 1], 50, 250, 100, 50, 250, 250); // thickness, caps, joints, miter graphics.setStrokeStyle(10, 1, "round"); // 开始画图 graphics.moveTo(50, 50); graphics.quadraticCurveTo(50, 175, 250, 250); graphics.lineTo(50, 250); stage.addChild(shape); stage.update(); }
function init(){ var canvas = document.getElementById("easel"); // 创建布景对象 var stage = new createjs.Stage(canvas); // 创建图形对象 var graphics = new createjs.Graphics(); // 创建Shape对象 var shape = new createjs.Shape(graphics); // 设置画笔 graphics.beginStroke("red"); graphics.setStrokeStyle(10, 1, 1); // 开始画图 // 矩形 //graphics.rect(50, 50, 250, 250); //graphics.drawRoundRect(50, 50, 250, 250, 50); //graphics.drawRoundRectComplex(50, 50, 250, 250, 50, 0, 50, 0); // 圆 //graphics.drawCircle(250, 250, 50); //graphics.drawEllipse(100, 100, 250, 100); //graphics.arc(100, 100, 50, 0, 90*(Math.PI/180), 1); // 0~90°,默认顺时针,1代表逆时针 // 多边形 //graphics.drawPolyStar(250, 250, 100, 10, .5, 0); // 链式操作 //graphics.moveTo(50, 50).lineTo(250, 250).lineTo(50, 250).closePath(); // 快捷方式 graphics.s("purple").ss(10, 1, 1).mt(50, 50).lt(250, 250).lt(50, 250).cp(); stage.addChild(shape); stage.update(); }
其中Graphics相关的都在这里:http://www.createjs.com/Docs/EaselJS/Graphics.html