1
我有一个问题globalCompositeOperation。如何在画布的元素上正确应用globalCompositeOperation?
我的目标是让蓝色元素仅在红色元素内部显示,并且根本不应该在红色矩形外部可见(某种溢出隐藏效果)。另外,红色和蓝色都必须具有转换能力(两者均可编辑)。你可以看到,如果我在画布上添加一个元素(黄色元素),蓝色区域在黄色和蓝色重叠的区域变得可见。
http://jsfiddle.net/redlive/q4bvu0tb/1/
var canvas = new fabric.Canvas('c');
var yellow = new fabric.Circle({
top: 200,
left: 0,
radius: 100,
strokeDashArray: [5, 5],
stroke: 'black',
strokeWidth: 5,
fill: 'yellow'
});
canvas.add(yellow);
var red = new fabric.Rect({
top: 0,
left: 0,
width: 300,
height: 300,
strokeDashArray: [5, 5],
stroke: 'black',
strokeWidth: 5,
fill: 'red',
rx: 40
});
canvas.add(red);
var blue = new fabric.Circle({
top: 150,
left: 80,
radius: 100,
strokeDashArray: [5, 5],
stroke: 'black',
strokeWidth: 5,
fill: 'blue',
globalCompositeOperation: 'source-atop'
});
canvas.add(blue);
var green = new fabric.Circle({
top: 0,
left: 0,
radius: 100,
strokeDashArray: [5, 5],
stroke: 'black',
strokeWidth: 5,
fill: 'green'
});
canvas.add(green);
强制性条件:
- 保留在画布上的元素的外观。
- 不修剪(因为裁剪 不允许添加背景颜色和图像在同一时间)
感谢您发表评论......这样它会,我知道......问题是,元素负载动态的画布,我需要保持他们的外观(Z-索引)。黄色必须在红色区域之后。 –
@Redlive ohk ..检查更新的答案 –
非常好...可能是一个潜在的解决方案,但是,使用Removing和Adding元素的这种操作会破坏动态元素渲染的条件,因此不会保留他们的排序... –