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
關注微信公衆號,獲取軟件最新消息