SpriteJS 是一款由 360 奇舞团开源的跨终端 canvas 绘图框架,可以基于 canvas 快速绘制结构化 UI、动画和交互效果,并发布到任何拥有 canvas 环境的平台上(比如浏览器、小程序和 node )。
我们知道,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 = '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 是这样写:
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 有如下特点:
通过 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} = 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 群:801359678
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.