UNPKG

@jianghh/canvas-graffiti

Version:

canvas涂鸦库,支持手写、笔写、鼠标,选中元素,并且移动、删除等功能。集成撤销重做操作。

41 lines (40 loc) 1.37 kB
var r = Object.defineProperty; var h = (t, e, i) => e in t ? r(t, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : t[e] = i; var s = (t, e, i) => (h(t, typeof e != "symbol" ? e + "" : e, i), i); class p { constructor(e) { s(this, "revokeList", []); s(this, "redoList", []); s(this, "preItem", null); // 存储上一步内容,由于撤销操作是需要滞后一步的,所以有个预备入栈的项 s(this, "maxSize", 5); this.revokeList = [], e && (this.maxSize = e); } get revokeSize() { return this.revokeList.length; } get redoSize() { return this.redoList.length; } push(e) { this.revokeSize === this.maxSize ? this.revokeList.shift() : this.revokeSize > this.maxSize && (this.revokeList = this.revokeList.reverse().splice(0, this.maxSize - 1).reverse()), this.preItem && this.revokeList.push(this.preItem), this.preItem = e, this.redoList = []; } pop() { this.redoList.push(this.preItem); const e = this.revokeSize ? this.revokeList.pop() : null; return this.preItem = e, e; } popRedo() { if (this.redoSize) { const e = this.redoList.pop(); return this.revokeList.push(this.preItem), this.preItem = e, e; } else return null; } clear() { this.revokeList = [], this.redoList = [], this.preItem = null; } } export { p as CacheStack };