[英]Kineticjs Undo / Redo with event handlers, shapes and images
我正在使用Canvas HTML5开发设计器绘图工具。 我将具有以下功能:添加图像,添加文本,添加形状,旋转,缩放,颜色等...
我正在寻找一种管理动作历史记录的好方法(撤消,重做),我发现了一种非常好的方法,您可以在这里找到它: 如何做撤消重做
我很高兴这将使我的生活比我想象的要轻松,但是我错了。 它基于Kinetic.Node.create('json', jsonLayer);
。 尽管乍一看似乎效果不错,但它仍然存在一些问题:
您还能向我推荐什么其他可能性? 我在考虑以下问题:
是的,Kinetic保存为JSON不会包含事件处理程序或图像。
在JSON节点反序列化和重新水化之后,您必须重新连接处理程序。
经过一些准备,您甚至可以自动化此重新布线。
例如,
首先将所有事件处理程序保存在一个对象或数组中:
var eventHandlers={
myClickHandler1:function(e){ alert("Fired myClickHandler1"); },
myClickHandler2:function(e){ alert("Fired myClickHandler2"); },
myMouseMoveHandler1:function(e){ alert("Fired myMouseMoveHandler1"); },
myMouseMoveHandler2:function(e){ alert("Fired mymouseMoveHandler2"); }
}
其次,向需要事件处理程序的每个Kinetic.Node添加一个自定义属性:
var circle1 = new Kinetic.Circle({
x:100,
y:100,
radius: 30,
fill: 'red',
stroke: 'black',
strokeWidth: 4,
draggable: true,
clickEvent:"myClickHandler1"
});
最后 ,在节点补水之后,您可以自动重新绑定事件处理程序:
function rewireHandlers(node){
var handler;
// rewire click handler
handler=node.getAttr("clickEvent");
if(handler && eventHandlers[handler]){
node.on("click",eventHandlers[handler])
}
// rewire other event handlers the same way
}
// call for rewiring
rewireHandlers(circle1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.