SpriteJS -- 一款簡單的跨終端 canvas 繪圖框架

SpriteJS -- 一款簡單的跨終端 canvas 繪圖框架

來自專欄奇舞周刊

SpriteJS 是一款由360奇舞團開源,月影大大親自操刀的跨終端 canvas 繪圖框架,可以基於 canvas 快速繪製結構化 UI、動畫和交互效果,並發布到任何擁有canvas環境的平台上(比如瀏覽器、小程序和node)。

  • 官方網站:http://spritejs.org
  • Github地址:github.com/spritejs/spr
  • DEMO示例:spritejs.org/demo/

為什麼要開發 SpriteJS

我們知道,canvas API可以很靈活地繪製各種矢量圖形到畫布上,但是 canvas API 本身比較低級,比如我們要在畫布中央繪製一個帶有圓角的紅色矩形,使用 canvas 原生的 API,需要這樣:

const canvas = document.getElementById(paper)const context = canvas.getContext(2d)const [x, y, w, h, r] = [200, 200, 200, 200, 50]context.fillStyle = redcontext.beginPath()context.moveTo(x + r, y)context.arcTo(x + w, y, x + w, y + h, r)context.arcTo(x + w, y + h, x, y + h, r)context.arcTo(x, y + h, x, y, r)context.arcTo(x, y, x + w, y, r)context.closePath()context.fill()

如果實現相同的效果,使用 SpriteJS 是這樣寫:

const scene = new spritejs.Scene(#container)const layer = scene.layer()const s = new spritejs.Sprite({ anchor: 0.5, bgcolor: red, pos: [300, 300], size: [200, 200], borderRadius: 50,})layer.append(s)

Sprite 為圖形創建類似於 DOM 的對象模型,因此我們可以像創建 DOM 元素一樣,創建 Sprite 元素,並將它們 append 到 layer 上,從而將元素呈現到畫布上。SpriteJS 有如下特點:

  • 基於 canvas 繪製的文檔對象模型
  • 四種基本精靈類型:Sprite、Path、Label、Group
  • 支持基礎和高級的精靈屬性,精靈盒模型、屬性與 CSS3 具有高度一致性。
  • 簡便而強大的 Transition、Animation API
  • 支持雪碧圖和資源預載入
  • 可擴展的事件機制
  • 高性能的緩存策略
  • 對 D3、Matter-js、Proton和其他第三方庫友好
  • 跨平台,支持服務端渲染、微信小程序

基本使用介紹

通過 NPM 或者直接載入 CDN 版本即可使用 SpriteJS

npm install spritejs save<script src="//lib.baomitu.com/spritejs/2.0.0-alpha.28/spritejs.min.js"></script>

註:在服務端使用需要安裝 node-canvas

下面是簡單的用法示例,大家也可以直接訪問 JSBin 查看效果。

const {Scene, Sprite} = spritejsconst scene = new Scene(#demo-quickStart, {viewport: [770, 200], resolution: [3080, 800]})const layer = scene.layer()const robot = new Sprite(https://p5.ssl.qhimg.com/t01c33383c0e168c3c4.png)robot.attr({ anchor: [0, 0.5], pos: [0, 0],})robot.animate([ {pos: [0, 0]}, {pos: [0, 300]}, {pos: [2700, 300]}, {pos: [2700, 0]},], { duration: 5000, iterations: Infinity, direction: alternate,})layer.append(robot)

文檔

  • 齊全的使用文檔:中文 | EN
  • 各種各樣的例子
  • 詳細的 API 文檔
  • 原博文地址:SpriteJS -- Canvas動畫從未如此簡單

要深入了解 SpriteJS 或者希望給 SpriteJS 貢獻代碼,可以關注我們的 GitHub倉庫,大家的寶貴 star 是對我們最大的鼓勵和支持。如果對 SpriteJS 有疑問,或者需要了解進一步細節,可以加入 SpriteJS 官方QQ群:

qm.qq.com/cgi-bin/qm/qr? (二維碼自動識別)


推薦閱讀:

用canvas畫神盾局Logo
【canvas】一個少女心滿滿的例子帶你入門 canvas
網頁中實現正六邊形的N種姿勢
canvas可以替代html與css了嗎?
OffscreenCanvas - 概念說明及使用解析

TAG:HTML5 | Canvas | 動畫 |