streakjs 是一款多端 JavaScript Canvas 框架,支持桌面及移动浏览器、Node.js、微信小程序等平台,使用统一的 API,快速实现图形绘制、变换、动画和交互等功能。javascript
streakjs 无依赖库,能够直接在github下载js文件,或使用 npm 命令安装html
npm install streakjs
复制代码
也能够使用 CDN 版本java
<script src="https://cdn.jsdelivr.net/npm/streakjs/dist/streakjs.min.js"></script>
复制代码
在 html 中添加一个用于 streakjs 建立舞台的容器node
<div id="container"></div>
复制代码
var stage = new streakjs.Stage({
container: "container",
width: 640,
height: 480
});
复制代码
var layer = new streakjs.Layer();
复制代码
var circle = new streakjs.shapes.Circle({
x: stage.width / 2,
y: stage.height / 2,
radius: 70,
fill: "red",
stroke: "black"
});
layer.add(circle);
复制代码
stage.add(layer);
复制代码
完整代码,详见 guyoung.github.io/streakjs/#/…git
npm install canvas
复制代码
node-canvas 安装方法,详见 github.com/Automattic/…github
npm install streakjs
复制代码
var streakjs = require("streakjs");
streakjs.adaptive.getGlobal().canvas = require("canvas");
var stage = new streakjs.Stage({
width: 400,
height: 400
});
var layer = new streakjs.Layer();
var circle = new streakjs.shapes.Circle({
x: stage.width / 2,
y: stage.height / 2,
radius: 70,
fill: "red",
stroke: "black",
strokeWidth: 4
});
layer.add(circle);
stage.add(layer);
console.log(circle.toDataURL());
复制代码
微信小程序使用 streakjs,详见 github.com/guyoung/str…npm
实际运行效果,请扫描小程序码json
Node 类是场景、图层、图形、图形组等对象的基类,提供公共属性和方法。canvas
Stage 是一个容器对象,在 streakjs 中,Stage 对象做为顶层容器使用。一个 Stage 对象能够添加多个图层。小程序
Layer 是一个容器对象,内部封装了 canvas 对象。
Shape 类是全部图形对象的基类,能够经过继承 Shape 类或经过建立 Shape 对象方式来自定义图形对象
Group 是一个容器对象,Group 对象用于把多个不一样的 Shape 对象,或其余 Group 对象组合成一个复杂的图形进行统一管理。
streakjs 内置多种图形对象
除了使用以上内置图形对象外,您也能够经过继承 streakjs Shape 类或经过建立 Shape 对象时定义 sceneFunc 函数方式来自定义图形对象
var triangle = new streakjs.Shape({
sceneFunc: function(context, shape) {
context.beginPath();
context.moveTo(20, 50);
context.lineTo(220, 80);
context.quadraticCurveTo(150, 100, 260, 170);
context.closePath();
context.fillStrokeShape(shape);
},
fill: "#00D2FF",
stroke: "black",
strokeWidth: 4
});
复制代码
sreakjs 中全部继承自 Node 的对象,包括 Stage、Layer、Shape、Group 等,都具备如下属性:
var rect2 = new streakjs.shapes.Rect({
x: (stage.width - 100) / 2,
y: 150,
width: 100,
height: 50,
fill: "green",
stroke: "black",
strokeWidth: 5,
cornerRadius: 10,
skewY: 30
});
复制代码
sreakjs 中每一个图形对象都支持如下的样式属性:
var rect = new streakjs.shapes.Rect({
x: (stage.width - 240) / 2,
y: 100,
width: 240,
height: 80,
fillPatternImage: res,
fillPatternOffset: { x: -220, y: 70 }
});
复制代码
streakjs 全部继承自 Node 类的对象都能实现拖曳功能,须要将对象的 draggable 属性设为 true
var circle = new streakjs.shapes.Circle({
x: stage.width / 2,
y: stage.height / 2,
radius: 70,
fill: "red",
stroke: "black",
strokeWidth: 4,
draggable: true
});
复制代码
sreakjs 中全部继承自 Node 的对象均可以绑定事件
circle.on("mouseover", function() {
writeMessage("Mouseover Circle");
});
circle.on("mouseout", function() {
writeMessage("Mouseout Circle");
});
circle.on("mousedown", function() {
writeMessage("Mousedown Circle");
});
circle.on("mouseup", function() {
writeMessage("Mouseup Circle");
});
复制代码
rect.on("mouseover mouseout mousedown mouseup touchstart touchend", function( evt ) {
writeMessage("Rect Multi Events: " + evt.type);
});
复制代码
streakjs 中 Animation 对象提供基本动画功能。
var period = 2000;
anim = new streakjs.Animation(function(frame) {
var scale = Math.sin((frame.time * 2 * Math.PI) / period) + 0.001;
regularPolygon.scale = { x: scale, y: scale };
}, layer);
复制代码
完整代码,详见 guyoung.github.io/streakjs/#/…
streakjs 中 Tween 对象提供缓动动画功能,能够实现图形从原始的状态到新的状态线性变化,包括位置、大小、旋转、缩放、倾斜、颜色、透明等变化
var tween = new streakjs.Tween({
node: rect,
duration: 1,
x: 240,
y: 100,
fill: "red",
rotation: Math.PI * 2,
opacity: 1,
strokeWidth: 6,
scaleX: 1.5
});
setTimeout(function() {
tween.play();
}, 5000);
复制代码
完整代码,详见 guyoung.github.io/streakjs/#/…
streakjs 的 Stage、Layer、Group 等容器对象都具备 find、findOne 方法,能够根据 ID、Name 和类名来获取对象
var shape = layer.find("#circle1")[0];
复制代码
var shape = layer.find(".circle2")[0];
复制代码
var shapes = layer.find("Circle");
复制代码
完整代码,详见 guyoung.github.io/streakjs/#/…
stage.toJSON();
复制代码
var json =
'{"attrs":{"width":578,"height":200},"className":"Stage","children":[{"attrs":{},"className":"Layer","children":[{"attrs":{"x":100,"y":100,"sides":6,"radius":70,"fill":"red","stroke":"black","strokeWidth":4},"className":"RegularPolygon"}]}]}';
var stage = streakjs.Node.load(json, "container");
复制代码
var dataURL = stage.toDataURL({ pixelRatio: 3 });
downloadURI(dataURL, "stage.png");
复制代码
完整代码,详见 guyoung.github.io/streakjs/#/…
了解更多使用方法,请访问项目网站 guyoung.github.io/streakjs
关注微信公众号,获取软件最新消息