@jianghh/canvas-graffiti
Version:
canvas涂鸦库,支持手写、笔写、鼠标,选中元素,并且移动、删除等功能。集成撤销重做操作。
41 lines (40 loc) • 1.37 kB
JavaScript
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
};