[开源] SpriteJS -- 一款简单的跨终端 canvas 绘图框架

SpriteJS 是一款由360奇舞团开源的跨终端 canvas 绘图框架,能够基于 canvas 快速绘制结构化 UI、动画和交互效果,并发布到任何拥有canvas环境的平台上(好比浏览器、小程序和node)。javascript

为何要开发 SpriteJS

咱们知道,canvas API能够很灵活地绘制各类矢量图形到画布上,可是 canvas API 自己比较低级,好比咱们要在画布中央绘制一个带有圆角的红色矩形,使用 canvas 原生的 API,须要这样:html

const canvas = document.getElementById('paper')
const context = canvas.getContext('2d')

const [x, y, w, h, r] = [200, 200, 200, 200, 50]

context.fillStyle = 'red'
context.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 是这样写:java

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 有以下特色:node

  • 基于 canvas 绘制的文档对象模型
  • 四种基本精灵类型:Sprite、Path、Label、Group
  • 支持基础和高级的精灵属性,精灵盒模型、属性与 CSS3 具备高度一致性。
  • 简便而强大的 Transition、Animation API
  • 支持雪碧图和资源预加载
  • 可扩展的事件机制
  • 高性能的缓存策略
  • D3Matter-jsProton和其余第三方库友好
  • 跨平台,支持服务端渲染微信小程序

基本使用介绍

经过 NPM 或者直接加载 CDN 版本便可使用 SpriteJSgit

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

注:在服务端使用须要安装 node-canvasgithub

下面是简单的用法示例,你们也能够直接访问 JSBin 查看效果。shell

const {Scene, Sprite} = spritejs

const 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)

文档

要深刻了解 SpriteJS 或者但愿给 SpriteJS 贡献代码,能够关注咱们的 GitHub仓库,你们的宝贵 star 是对咱们最大的鼓励和支持。若是对 SpriteJS 有疑问,或者须要了解进一步细节,能够加入 SpriteJS 官方QQ群:npm

相关文章
相关标签/搜索