2012-07-24 14 views

Odpowiedz

12

Istnieją dwa możliwe sposoby interpretacji pytania. Jednym z nich jest, że masz na myśli faktycznie gniazdo canvas same elementy, takie jak ten:

<canvas id="outer"> 
    <canvas id="inner"></canvas> 
</canvas> 

To jest legalne (według validator.nu), ale bezcelowe. Zawartość wewnątrz elementu canvas służy do wycofania. Jedynym sposobem wykorzystania zawartości elementu canvas jest, jeśli przeglądarka nie obsługuje canvas, w takim przypadku wewnętrzny element canvas i tak nie będzie widoczny.

Innym możliwym sposobem na zinterpretowanie pytania jest wyświetlenie obrazu pokazanego na jednym płótnie w innym. Jest to dość proste, element canvas może być użyty jako pierwszy parametr dla context.drawImage(). Jeśli masz dwie canvas elementy:

<canvas id="c1" width="200" height="200"></canvas> 
<canvas id="c2" width="200" height="200"></canvas> 

Następnie this script (using jQuery) wyciągnie na pierwszym canvas a następnie dodać, że cztery razy jako obraz do drugiego canvas:

var c1 = $('#c1'); 
var ctx1 = c1[0].getContext('2d'); 

ctx1.fillRect(50,50,100,100); 

var c2 = $('#c2'); 
var ctx2 = c2[0].getContext('2d'); 

ctx2.drawImage(c1[0],0,0,100,100); 
ctx2.drawImage(c1[0],100,0,100,100); 
ctx2.drawImage(c1[0],0,100,100,100); 
ctx2.drawImage(c1[0],100,100,100,100); 

ale znowu, dlaczego prawda? Można replikować obraz drugiego canvas powyżej just using one:

var c1 = $('#c1'); 
var ctx1 = c1[0].getContext('2d'); 

ctx1.fillRect(25,25,50,50); 
ctx1.fillRect(125,25,50,50); 
ctx1.fillRect(25,125,50,50); 
ctx1.fillRect(125,125,50,50); 

Tak w skrócie: tak, to jest możliwe, ale nie jest to naprawdę konieczne prostego stosowania.

+2

Istnieje wiele (niewątpliwie nietrywialnych) powodów używania drugiego płótna. Na przykład, rysowanie ruchomego wykresu jest najłatwiejsze poprzez skopiowanie wykresu na inny obszar poza ekranem, wyczyszczenie głównego obszaru roboczego, a następnie skopiowanie przesunięcia z lewej strony ekranu o jeden piksel i narysowanie nowych danych w brakującej kolumnie. (Jest to konieczne tylko wtedy, gdy tło wykresu jest przezroczyste.) – Phrogz

+0

@Phrogz Tak, również różne rzeczy do przetwarzania obrazu. Ale stoję przy moim "nie jest to konieczne w prostym użyciu", nie sądzę, że którykolwiek z tych materiałów jest istotny dla tego pytania lub tej odpowiedzi. – robertc

+3

Być może nie, ale nowicjusz może przyjąć twoje sformułowanie, aby znaczyło, że jest nadmierne, gdy często jest to lepszy i bardziej optymalny sposób osiągnięcia czegoś. Jeśli masz zmienne płótno z elementami statycznymi (powiedzmy, gra), to ta technika ma ogromne zalety wydajności - wystarczy tylko raz narysować bitmapę/wektory w płótnie, a następnie po prostu narysować ją na głównej podczas aktualizacji. +1 za dobrą odpowiedź. – MickMalone1983

0

Bezcelowe byłoby zagnieżdżanie płótna wewnątrz innego płótna. Strona wyświetla tylko to, co znajduje się wewnątrz znacznika canvas, jeśli przeglądarka nie obsługuje canvas. Po prostu zrób to, co powiedział robertc:
<canvas id="background">fallbacks/polyfills go in here...</canvas> <canvas id="foreground">.. or here, but not other canvases.</canvas>

Powiązane problemy