【发布时间】:2014-11-22 21:22:32
【问题描述】:
我正在尝试将多个对象绘制到一个画布元素,然后将它们淡出干净。但是,当尝试使用 globalAlpha 来实现这一点时,您可以看到通常会被遮挡的对象片段,因为每个对象都变得单独透明。解释:
考虑以下代码:
context.fillStyle="yellow";
context.fillRect(0,0,100,100);
context.fillStyle="blue";
context.fillRect(50,50,100,100);
这将创建一个像这样的图像:
Y = Yellow, B = Blue
Y Y Y Y
Y Y Y Y
Y Y B B B B
Y Y B B B B
B B B B
B B B B
根据需要,蓝色框完全覆盖了黄色框。但是,当我们开始在混合中添加透明度时:
context.globalAlpha=0.5;
context.fillStyle="yellow";
context.fillRect(0,0,100,100);
context.fillStyle="blue";
context.fillRect(50,50,100,100);
我们最终得到了这个:
Y = Yellow, B = Blue, M = Mix of both
Y Y Y Y
Y Y Y Y
Y Y M M B B
Y Y M M B B
B B B B
B B B B
由于蓝色矩形在绘制时是透明的,因此之前被遮挡的黄色框的角现在可见。这太丑了。
请记住:正在淡出的画布及其背后的元素都是复杂的、动态的混乱;手动跟踪正在绘制的每个对象以及它们如何重叠会很快失去控制,并且使用纯色叠加层来“伪造”淡出同样不是一个可行的解决方案。
虽然我愿意使用 CSS 透明度来实现这一点,如果它真的是最好的方法的话,我希望使用画布本身来实现这一点。我遇到过canvas pixel manipulation,这可能是一种选择,但我担心我可能忽略了一种更简单、更有效的处理方式。
有什么想法吗?
【问题讨论】:
-
是什么让您认为使用 CSS 不透明度在某些方面较差?
-
所以您正在寻找现已停产的Crayola Overwriters HTML5 Canvas 等价物?
标签: javascript html canvas