var canvas;
var state;
var undo = [];
var redo = [];
function save() {
redo = [];
$('#redo').prop('disabled', true);
if (state) {
undo.push(state);
$('#undo').prop('disabled', false);
}
state = JSON.stringify(canvas);
}
function replay(playStack, saveStack, buttonsOn, buttonsOff) {
saveStack.push(state);
state = playStack.pop();
var on = $(buttonsOn);
var off = $(buttonsOff);
on.prop('disabled', true);
off.prop('disabled', true);
canvas.clear();
canvas.loadFromJSON(state, function() {
canvas.renderAll();
on.prop('disabled', false);
if (playStack.length) {
off.prop('disabled', false);
}
});
}
$(function() {
canvas = new fabric.Canvas('canvas');
canvas.setWidth(500);
canvas.setHeight(500);
save();
canvas.on('object:modified', function() {
save();
});
$('#draw').click(function() {
var imgObj = new fabric.Circle({
fill: '#' + Math.floor(Math.random() * 16777215).toString(16),
radius: Math.random() * 250,
left: Math.random() * 250,
top: Math.random() * 250
});
canvas.add(imgObj);
canvas.renderAll();
save();
});
$('#undo').click(function() {
replay(undo, redo, '#redo', this);
});
$('#redo').click(function() {
replay(redo, undo, '#undo', this);
})
});
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js" type="text/javascript"></script>
</head>
<body>
<button id="draw">circle</button>
<button id="undo" disabled>undo</button>
<button id="redo" disabled>redo</button>
<canvas id="canvas" style="border: solid 1px black;"></canvas>
</body>
var rect = new fabric.Rect({ width: 156, height: 76, id: 'rectangle', fill: '#fbfbfb', centeredRotation: false, hasControls: false, hasRotatingPoint: false });
如你所见,我有id: 'rectangle'
(这是因为我想给每个形状一个唯一的ID)。问题是,在你发布的jsfiddle中,这个ID没有包含在json中。我该如何使这个属性包含在json中?谢谢。 - Tahmidname: 'rectangle ' + window.counter
。当使用撤消或重做功能时,该属性会以某种方式变为“未定义”。 - Tahmid