【问题标题】:How can I manage to move object between various layers?我怎样才能设法在各个层之间移动对象?
【发布时间】:2018-02-28 02:38:13
【问题描述】:

我需要在层之间移动对象,实际上我有一个主要工作区域(比如正方形),在这个工作区域内我有一个与外部相同的形状(出血形状),但尺寸更小,比如这个:

https://jsfiddle.net/p0hszz22/24/ [见圆形、正方形、矩形]

//@ add main square
function addSquare() {
  clearThisCanvas();
  var square = new fabric.Rect({});
  canvas.add(square);
  addSquare1(); //call bleedline square
}

//@ add bleedline square
function addSquare1() {
  var square = new fabric.Rect({});
  canvas.add(square);
  centreOnCanvas(square);
}

所以我在画布上有两个对象,现在我的要求是当我添加任何图像并将该图像(或任何对象)移动到工作区域内时,虚线(出血形状)应该始终位于我的图像上方,所以它向用户提示图像或出血区域之外的任何内容将被忽略(当前情况:根本没有发生)

我尝试过的:

  1. 我试图改变这两个形状的顺序,当我选择了主形状(外部)时,我的漏血形状隐藏着。

  2. 我曾想过将这些形状组合成一个组,但还是没有成功。

我怎样才能做到这一点?我只需要在任何东西越过出血线时立即向用户展示,它不会被考虑。 任何我可以再次查找的研究链接或关键字或任何建议或任何示例都会有所帮助。

谢谢

PS:抱歉,小提琴中的代码实际上只是为了快速设置。

【问题讨论】:

标签: javascript html5-canvas fabricjs layer


【解决方案1】:

尝试为流血形状使用叠加图像,这可能符合您的需求。 该图像将始终位于画布内的其他对象之上

canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png',
     canvas.renderAll.bind(canvas), {
        opacity: 0.5,
        width : 400, // your width
        height : 400, // your height
        originX: 'center',
        originY: 'center'
});

【讨论】:

  • 感谢您的回答,是的,overlayImage 帮助了我,但不是图像而是形状(出血形状),然后我可以将图像恢复为出血形状。是否有任何链接可以了解有关“setOverlayImage”的更多信息,我们可以使用它进行哪些配置。谢谢
  • 虽然我已经实现了这一点,但是当我执行 canvas.toSVG() 时,这种叠加会导致生成额外的形状?有什么原因吗?
  • 在这里查看这个例子:1.创建了基本形状2.创建了出血形状3.setOverlayImage现在当我清除画布时,它仍然在画布上显示圆圈并且可以轻松导出,甚至画布.getObjects() 给出空数组jsfiddle.net/0LrxLyLj/3
  • 您好,您使用的 setOverlayImage 错误。请检查:jsfiddle.net/josefano09/0LrxLyLj/4 并阅读我的 cmets
  • 感谢您的评论,是的,这是图像,我正在修改形状,是我做错了吗?但我可以有许多形状(圆形、三角形、多边形、矩形等),大小不同,而且我必须放在上面的流血形状。对于形状而不是图像,是否还有其他解决方法?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 2017-06-02
  • 2016-04-04
  • 1970-01-01
  • 2018-07-15
相关资源
最近更新 更多