【发布时间】:2016-10-18 09:11:04
【问题描述】:
当我使用按钮选择所有对象时,我可以很好地移动所有对象,并且它们都保持在原位。但是,如果我想在单击画布上的对象时触发该事件,则它不会按预期工作。
这是一个Plnk;
http://plnkr.co/edit/iqn5QpBRe30eftoI1z8p?p=preview
我用这个作为代码的 sn-p 来选择全部;
function selectAllCanvasObjects(){
var objs = canvas.getObjects().map(function(o) {
return o.set('active', true);
});
var group = new fabric.Group(objs, {
originX: 'center',
originY: 'center'
});
canvas._activeObject = null;
canvas.setActiveGroup(group.setCoords()).renderAll();
}
当我通过单击按钮激活它时,我可以移动画布上的所有对象,而且它们也不会在单击时移动位置。
如果我通过以下方式激活它;
triangle.on('mousedown', function(e){
selectAllCanvasObjects();
})
它不会立即初始化移动所有对象。
如果我使用;
canvas.on('mouse:down', function(e){
selectAllCanvasObjects();
})
它会让物体自动跳转位置。
我想知道是否有一种方法可以使用前面的两种方法,以便函数在单击时表现得像?
【问题讨论】:
-
我认为您通过使用处理程序覆盖
mouse:down的默认行为来搞乱它。如果您从画布中删除所有其他鼠标事件处理程序并用您的处理程序覆盖mouse:down,那么它的作用与您的按钮完全相同:plnkr.co/edit/ouubVzNi3MTl4rXIQOua?p=preview(第一次单击全选,第二次单击将它们移动到(0, 0)原因)。我认为您不应该覆盖画布事件处理程序,但也许有一种方法可以扩展它们。 -
您想覆盖鼠标:在画布对象上按下,基本上发生的是默认单击并拖动单个对象,并且您的单击和全选同时工作,这会产生奇怪的对象的行为
标签: javascript canvas html5-canvas fabricjs