2013-02-11 66 views
0

后自动我在这里有点问题,但我不知道这是否是一个错误或一个新的功能,因为在KineticJS更改日志有以下变化:KineticJS调用moveToTop()点击超过形状

”拖放操作现在自动动态地创建临时顶层,并将节点放置在那里用于组和形状,以大大提高拖放性能...“

我曾经使用4.0.0版本测试项目和我必须使用明确moveToTop()当我想要移动一些形状到顶部(我认为这是正确的方式)。现在(版本4.3.2),如果我只是点击一些图片,它会自动移动到顶部反对我的愿望。这个临时层应该是内部的东西,没有任何视觉。那么这真的是一个错误,或者有什么方法可以解决这个问题。

即使实验室发生了变化,我认为,如果不调用moveUp,moveToTop等函数,我认为这些对象可以保持空间顺序。例如,在下面的链接中,没有moveToTop()函数调用,即使这样,如果单击形状,它们将移动到顶部。

http://www.html5canvastutorials.com/kineticjs/html5-canvas-move-shape-to-another-container-with-kineticjs/

感谢您的关注

回答

0

虽然我不认为你可以完全禁用层,可以关闭形状移到了。假设你有像一些形状:

var shape1 = new Kinetic.Rect({ 
     x: 100, 
     y: 100, 
     width: 100, 
     height: 100, 
     fill: 'blue', 
     draggable: true 
    }); 

你需要一个参数添加到这个禁用你的形状移动到上拖动临时层:它必须是假的“dragOnTop”,这样会让你的形状是这样的:

var shape1 = new Kinetic.Rect({ 
     x: 100, 
     y: 100, 
     width: 100, 
     height: 100, 
     fill: 'blue', 
     draggable: true, 
     dragOnTop: false //<-- add this line so that this shape doesn't use the drag layer. 
    }); 
+0

噢谢谢你,这个解决方案在这里工作得很好。但是,这是新的框架行为还是一个错误?用你教给我的属性名称(dragOnTop)搜索我在github上发现了一个关于这个问题的问题https://github.com/ericdrowell/KineticJS/issues/251 – wfaria 2013-02-12 02:25:53

+0

好问题。我相信这只是行为。当您单击(拖动)该项目时,它会创建一个新图层并将其放置在图层中,而不记得上一图层的位置。因此,当您释放点击时,它会将项目放置在原始图层的顶部,除非您明确地告诉它要记住最初与on('click')事件相关的位置。 – SoluableNonagon 2013-02-12 14:26:47

+0

这是在屏幕上有大量项目时对代码进行优化的结果。就像在实验室中一样,如果您拥有数千个节点,那么在临时新层中重绘一个节点的效率会高于旧层中的所有节点。 – SoluableNonagon 2013-02-12 14:28:43