Как сделать прозрачный холст в html5?


123

Как сделать холст прозрачным? Мне это нужно, потому что я хочу положить два холста друг на друга.

Ответы:


194

По умолчанию холсты прозрачные.

Попробуйте установить фоновое изображение страницы, а затем накройте его холстом. Если на холсте ничего не нарисовано, вы можете полностью увидеть фон страницы.

Думайте о холсте как о картине на стеклянной пластине.


6
На мобильном устройстве Canvas имеет черный фон, поэтому наслоение холстов там не работает. (По крайней мере, в Chrome для Android)
николезный

11
Как обычно, хватит и стандартов.
Трийнко 07

6
Я думаю, что в этих ответах отсутствует главное. Как и в предыдущем вопросе, я хочу иметь два многослойных холста: нижний имеет статическое изображение, а верхний - анимированные спрайты. Этот верхний слой должен иметь прозрачный фон, но его также необходимо «очищать» и перерисовывать с каждым кадром анимации. Да, по умолчанию он запускается прозрачным, но как сделать его прозрачным и начало каждого нового кадра анимации?
J Sprague

3
Вот как очистить холст в любое время: stackoverflow.com/questions/2142535/…
Омиод,

Так как вы получили так много голосов, можете ли вы хотя бы ответить на вопрос? Как сделать непрозрачный холст прозрачным?
DDD

48

Я считаю, что вы пытаетесь сделать именно то, что я пытался сделать: мне нужны два сложенных холста ... нижний имеет статическое изображение, а верхний - анимированные спрайты. Из-за анимации вам необходимо очищать фон верхнего слоя до прозрачного в начале рендеринга каждого нового кадра. Я наконец нашел ответ: он не использует globalAlpha и не использует цвет rgba (). Простой и эффективный ответ:

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

45

Если вы хотите, чтобы конкретный объект <canvas id="canvasID">всегда был прозрачным, вам просто нужно установить

#canvasID{
    opacity:0.5;
}

Вместо этого, если вы хотите, чтобы некоторые элементы внутри области холста были прозрачными, вы должны установить прозрачность при рисовании, т.е.

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

Ах, я искал прозрачность fillStyle. Спасибо!
Workman

3
К вашему сведению: opacityизменения не будут иметь никакого эффекта, если на холсте есть фоновая заливка.
Адам Эберлин

3

Просто сделайте фон холста прозрачным.

#canvasID{
    background:transparent;
}

1
Этот ответ работает не во всех ситуациях, context.clearRect (0, 0, width, height) - это решение, которое сработало для меня
Дмитрий

2

Нарисуйте свои два холста на третьем холсте.

У меня была такая же проблема, и ни одно из решений здесь не решило мою проблему. У меня был один непрозрачный холст с другим прозрачным холстом над ним. Непрозрачный холст был полностью невидим, но фон тела страницы был виден. Рисунки с прозрачного холста сверху были видны, а непрозрачного холста под ним - нет.


0

Не могу прокомментировать последний ответ, но исправить это относительно просто. Просто установите цвет фона непрозрачного холста:

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

Я не уверен, но похоже, что цвет фона унаследован как прозрачный от тела.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.