如何在html5中制作透明画布?


122

如何使画布透明?我需要,因为我想将两个画布彼此叠放。

Answers:


192

默认情况下,画布是透明的。

尝试设置页面背景图像,然后在其上放置画布。如果画布上未绘制任何内容,则可以完全看到页面背景。

可以将画布视为在玻璃板上绘画。


5
画布在移动设备上具有黑色背景,因此在此处无法对画布进行分层。(至少在适用于Android的Chrome浏览器上)

11
像往常一样,对于标准而言是如此。
Triynko

6
我认为这些答案没有抓住重点。与以上问题类似,我希望有两层画布:最下面的画布具有静态图像,最上面的画布具有动画子画面。该顶层需要具有透明背景,但还必须“清除”并在每个动画帧中重新绘制。是的,默认情况下它开始透明,但是如何将其重置为透明以及每个新动画帧的开始?
J Sprague

3
这是随时清除画布的方法:stackoverflow.com/questions/2142535/…–
Omiod

由于您的投票太多,您至少也可以回答这个问题吗?如何使不透明的画布透明?
DDD

47

我相信您正在尝试完全按照我的意愿去做:我想要两张堆叠的画布……最下面的一个具有静态图像,最上面的一个包含动画精灵。由于动画的原因,您需要在渲染每个新帧的开始时将顶层的背景清除为透明的。我终于找到了答案:它没有使用globalAlpha,也没有使用rgba()颜色。简单有效的答案是:

context.clearRect(0,0,width,height);

44

如果您希望某个特定商品<canvas id="canvasID">始终保持透明,则只需设置

#canvasID{
    opacity:0.5;
}

相反,如果希望画布区域内的某些特定元素是透明的,则在绘制时必须设置透明度,即

context.fillStyle = "rgba(0, 0, 200, 0.5)";

啊,我在找fillStyle透明度。谢谢!
Workman

2
仅供参考:opacity如果画布中有背景填充,更改将无效。
亚当·埃伯林


2

将您的两个画布绘制到第三个画布上。

我遇到了同样的问题,这里没有解决方案可以解决我的问题。我有一个不透明的画布,上面有另一个透明的画布。不透明的画布是完全不可见的,但是页面主体的背景是可见的。可以看到顶部透明画布上的图形,而下面的不透明画布则不可见。


0

无法评论最后的答案,但修复相对容易。只需设置不透明画布的背景颜色即可:

#canvas1 { background-color: black; } //opaque canvas
#canvas2 { ... } //transparent canvas

我不确定,但看起来背景色是从身体继承为透明的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.