2011-01-27 1 views

risposta

136

Le tele sono trasparenti per impostazione predefinita.

Provare a impostare un'immagine di sfondo della pagina, quindi posizionare una tela su di essa. Se non viene disegnato nulla sulla tela, è possibile vedere completamente lo sfondo della pagina.

Pensa a una tela come a un dipinto su una lastra di vetro.

+2

È vero. Codepen per una sovrapposizione di tela: http://codepen.io/anon/pen/Kzcjl – Julik

+1

Canvas ha uno sfondo nero sui telefoni tele in modo stratificazione non funziona c'è. (Almeno su Chrome per Android) – nicholeous

+6

Così tanto per gli standard, come al solito. – Triynko

37

Iif si desidera un particolare <canvas id="canvasID"> per essere sempre trasparenti devi solo impostare

#canvasID{ 
    opacity:0.5; 
} 

Invece, se si desidera che alcuni elementi particolari all'interno dell'area tela per essere trasparenti, è necessario impostare la trasparenza quando si disegna , ovvero

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

Ah, stavo cercando la trasparenza fillStyle. Grazie! – Workman

+0

FYI: le modifiche di "opacità" non avranno alcun effetto se c'è un riempimento di sfondo nell'area di disegno. –

2

Dipingi le tue due tele su una terza tela.

Ho avuto questo stesso problema e nessuna delle soluzioni qui risolto il mio problema. Avevo una tela opaca con sopra un'altra tela trasparente. La tela opaca era completamente invisibile ma lo sfondo del corpo della pagina era visibile. I disegni dalla tela trasparente sulla parte superiore erano visibili mentre la tela opaca sotto non era.

0

Impossibile commentare l'ultima risposta ma la correzione è relativamente semplice. Basta impostare il colore di sfondo della tua tela opaca:

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

Non sono sicuro ma sembra che il background-color viene ereditata come trasparente dal corpo.

4

Basta impostare lo sfondo della tela su trasparente.

#canvasID{ 
    background:transparent; 
} 
24

Credo che si sta cercando di fare esattamente quello che ho appena provato a fare: Voglio due tele accatastate ... quello inferiore ha un'immagine statica e quella superiore contiene sprite animati. A causa dell'animazione, è necessario cancellare lo sfondo del livello superiore a trasparente all'inizio del rendering di ogni nuovo fotogramma. Alla fine ho trovato la risposta: non usa globalAlpha e non usa un colore rgba(). La risposta semplice ed efficace è:

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