Canvas (HTML)
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 29 aprilie 2016; verificările necesită
24 de modificări .
Canvas ( eng. canvas - " canvas ", rus. kanvas ) este un element HTML5 conceput pentru a crea o imagine bitmap bidimensională folosind scripturi, de obicei în JavaScript [1] . Originea blocului este în stânga sus. Fiecare element al blocului [2] este construit din acesta . Dimensiunea spațiului de coordonate nu reflectă neapărat dimensiunea zonei reale afișate [2] . În mod implicit, lățimea sa este de 300 de pixeli și înălțimea este de 150 [2] .
Este folosit, de regulă, pentru desenarea graficelor pentru articole și terenul de joc în unele jocuri cu browser. Dar poate fi folosit și pentru a încorpora un videoclip într-o pagină și pentru a crea un player cu drepturi depline.
Folosit în WebGL pentru accelerarea hardware a graficelor 3D [3] .
Bibliotecă JavaScript explorercanvas lansată de Google Arhivată 11 februarie 2013. , care a permis lucrul cu Canvas în browserele IE7 și IE8.
Canvas-ul poate îngreuna pentru roboți să recunoască Captchas . Când se utilizează canvas, nu se încarcă o imagine de pe server, ci un set de puncte (sau un algoritm de desen), conform căruia browserul desenează o imagine (captcha) [4] .
Istorie
Elementul canvasa fost introdus pentru prima dată de Apple în motorul WebKit pentru Mac OS X în vederea utilizării sale ulterioare în aplicațiile Dashboard și Safari [1] .
Lipsa pânzei în IE a fost remediată de Google prin lansarea propriei extensii scrise în JavaScript numită ExplorerCanvas [5] .
Până în prezent, pânza este folosită mai frecvent pentru graficare, animație simplă și jocuri în browsere [6] . WHATWG propune utilizarea canvas- ului ca standard pentru crearea de grafică în noile generații de aplicații web [7] .
Fundația Mozilla are un proiect numit Canvas 3D [8] care își propune să adauge suport la nivel scăzut pentru acceleratoarele grafice pentru a afișa imagini 3D prin elementul HTML canvas. Alături de aceasta, există biblioteci care implementează lucrul
cu modele tridimensionale , printre care trei
Suport
IE |
Firefox |
safari |
Crom |
Operă |
iOS |
Android
|
9.0+ |
3.0+ |
3.0+ |
3.0+ |
10,0+ |
3.0+ |
1.0+
|
Caracteristici
canvasvă permite să plasați pe pânză: imagine, video, text. Umpleți totul cu o culoare solidă sau trasați contururile sau chiar adăugați un gradient [9] . Adăugarea de umbre similare cu proprietățile css3 box-shadow și text-shadow. Și, în sfârșit, desenarea formelor prin specificarea punctelor de control. Mai mult, puteți modifica atât lățimea liniilor, cât și pensula de desen al liniilor, stilul conexiunilor de linii [10] .
Caracteristici
- Schimbarea înălțimii sau lățimii pânzei va șterge tot conținutul și toate setările, cu alte cuvinte, va fi creat din nou [11] ;
- Punctul de referință (punctul 0,0) este în colțul din stânga sus [12] . Dar poate fi deplasat [13] ;
- Nu există context 3D, există dezvoltări separate, dar nu sunt standardizate [14] ;
- Culoarea textului poate fi specificată în același mod ca și CSS, totuși, precum și dimensiunea fontului.
Exemple sau modele de optimizare
Dacă nu trebuie să redesenați pânza, dar trebuie să o manipulați, atunci puteți „face o poză” întregii pânze și o puteți salva într-o variabilă. Și lucrați deja cu acest desen, fără a forța ca pânza să fie desenată după fiecare manipulare.
Dacă nu întreaga imagine ar trebui actualizată, ci doar o parte din ea, atunci puteți șterge o anumită zonă de pe pânză și o puteți desena din nou.
Browserele pot optimiza animațiile care rulează în același timp prin reducerea numărului de reflow și revopsire la unul, ceea ce la rândul său va îmbunătăți acuratețea animației. De exemplu, animații JavaScript sincronizate cu tranziții CSS sau SVG SMIL. În plus, dacă o animație este realizată într-o filă care este invizibilă, browserele nu vor continua să redeseneze, ceea ce va duce la o utilizare mai mică a CPU, GPU, memorie și, ca urmare, la reducerea consumului de baterie în dispozitivele mobile [15] . Pentru a face acest lucru, utilizați requestAnimationFrame.
Toate browserele actuale au un filtru de estompare a imaginii atunci când măriți. Ar trebui folosit dacă procesați adesea imaginea pixel cu pixel. Prin reducerea imaginii, de exemplu, la jumătate și apoi mărirea ei în hardware folosind un filtru [16] .
Dacă jocul vă permite să procesați separat fundalul și elementele jocului, atunci are sens să faceți două pânze una peste alta [17] .
Pentru a șterge pânza, cel mai bun mod este să folosiți clearRect [17] , cu toate acestea, dacă ștergeți doar zonele necesare, atunci viteza va crește și mai mult.
Critica
- Încarcă excesiv procesorul și memoria RAM;
- Din cauza unei limitări a colectorului de gunoi, nu există nicio modalitate de a curăța memoria;
- Este necesar să procesați singur evenimentele cu obiecte [18] ;
- Performanță slabă la rezoluție înaltă [18] ;
- Trebuie să desenați fiecare element separat [18] .
- Capacitatea de a crea „balize” speciale pe pagini, așa-numitele. Canvas Fingerprinting , pentru urmărirea utilizatorilor pe web.
Beneficii
- Spre deosebire de SVG, este mult mai convenabil să faci față unui număr mare de elemente;
- Are accelerație hardware [16] [19] ;
- Puteți manipula fiecare pixel [18] ;
- Puteți aplica filtre de procesare a imaginii [18] ;
- Există multe biblioteci [18] .
Utilizare
Utilizarea și operațiunile asupra elementului sunt posibile numai prin JavaScript.
<!doctype html>
< html lang = "ro" >
< head >
< title > canvas
</ title >
< script src = "example.js" ></ script >
</ head >
< body >
< canvas id = " canvas" > Acest element nu este acceptat
</ canvas >
</ body >
</ html >
exemplu.js fișier
var canvas = document . getElementById ( 'canvas' ),
context = canvas . getContext ( '2d' );
function onLoadHandler () {
/* Faceți
ceva cu pânza următoare
*/
}
fereastra . onload = onLoadHandler ;
Exemple
Utilizarea JavaScript pentru a desena un cerc
< html lang = "ro" >
< head >
< title > circle
</ title >
</ head >
< body >
< canvas id = "example" > Actualizează browserul
</ canvas >
< script >
var canvas = document . getElementById ( 'exemplu' ),
context = canvas . getContext ( '2d' );
function drawCircle ( x , y , r ) {
context . arc ( x , y , r , 0 , 2 * Math . PI , fals );
}
context . startPath ();
trage un cerc ( 150 , 75 , 50 );
context . lățime de linie = 15 ;
context . strokeStyle = '#0f0' ;
context . accident vascular cerebral ();
</ script >
</ body >
</ html >
Redare pe pânză
a unui copac pitagoreic suflat
< html >
< head >
< title > Arborele lui Pitagora
</ title >
< script type = "text/javascript" >
// funcția desenează o linie la un unghi unghi de la un punct specificat de lungime ln
function drawLine ( x , y , ln , unghi ) {
context . mutăTo ( x , y );
context . lineTo ( Math . round ( x + ln * Math . cos ( unghi )), Math . round ( y - ln * Math . sin ( unghi )));
}
// Funcția desenează funcția de
arbore drawTree ( x , y , ln , minLn , angle ) {
if ( ln > minLn ) {
ln = ln * 0,75 ;
drawLine ( x , y , ln , unghi );
x = Matematică . rotund ( x + ln * Math . cos ( unghi ));
y = Matematică . rotund ( y - ln * Math . sin ( unghi ));
drawTree ( x , y , ln , minLn , unghi + Math . PI / 4 );
drawTree ( x , y , ln , minLn , angle - Math . PI / 6 );
// dacă puneți unghiul Math.PI/4 , atunci va ieși arborele clasic
}
}
// Inițializarea variabilelor
function init () {
var canvas = document . getElementById ( „copac” ),
x = 100 + ( pânză . lățime / 2 ),
y = 170 + pânză . înălțimea , // poziția tulpinii
ln = 120 , // lungimea inițială a liniei
minLn = 5 ; // pânză de lungime minimă a liniei
. latime = 480 ; // Lățimea pânzei pânzei . inaltime = 320 ; // înălțimea pânzei context = pânză . getContext ( '2d' ); context . fillStyle = '#ddf' ; // contextul culorii de fundal . strokeStyle = '#020' ; // contextul culorii liniei . fillRect ( 0 , 0 , pânză . lățime , pânză . înălțime ); context . lățime de linie = 2 ; // context lățimea liniei . startPath (); drawTree ( x , y , ln , minLn , Math . PI / 2 ); context . accident vascular cerebral (); }
fereastra . onload = init ;
</ script >
</ head >
< body >
< canvas id = "tree" ></ canvas >
</ body >
</ html >
Biblioteci
- libCanvas este un cadru canvas ușor, dar puternic.
- Processing.js - Un port al limbajului de vizualizare Processing
- EaselJS este o bibliotecă cu un API similar cu Flash
- PlotKit - o bibliotecă pentru crearea de diagrame și grafice
- Rekapi - Canvas API pentru crearea de animații pe cadre cheie
- PhiloGL este un cadru WebGL pentru vizualizarea datelor, dezvoltarea jocurilor și codificarea creativă.
- JavaScript InfoVis Toolkit - Creează o vizualizare interactivă a datelor 2D Canvas pentru web.
- Frame-Engine este un cadru pentru dezvoltarea de aplicații și jocuri.
Vezi și
Note
- ↑ 1 2 Canvas Guide (MDN) . Preluat la 23 martie 2015. Arhivat din original la 30 martie 2015. (nedefinit)
- ↑ 1 2 3 4.12.4 Elementul canvas - Standard HTML . Arhivat din original pe 27 aprilie 2009. (nedefinit)
- ↑ Canvas (MDN) . Preluat la 23 martie 2015. Arhivat din original la 25 martie 2015. (nedefinit)
- ↑ Un exemplu de construire a captcha după puncte Arhivat 19 decembrie 2013.
- ↑ explorercanvas (link în jos) . Data accesului: 7 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ Google promovează HTML5 ca platformă de jocuri (downlink) . Data accesului: 7 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ Specificații de la WHATWG (link nu este disponibil) . Data accesului: 7 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ Mozilla Canvas 3D . Data accesului: 7 februarie 2013. Arhivat din original pe 12 martie 2013. (nedefinit)
- ↑ Gradienți (link inaccesibil) . Data accesului: 7 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ Să lucrăm cu linii (link inaccesibil) . Consultat la 8 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ Este posibil să „reîncărcați” pânza? // Întrebați-l pe profesorul Markap (linkul este în jos) . Data accesului: 5 iulie 2013. Arhivat din original pe 7 iulie 2013. (nedefinit)
- ↑ Coordonatele canvas (link indisponibil) . Data accesului: 5 iulie 2013. Arhivat din original pe 7 iulie 2013. (nedefinit)
- ↑ Transformări canvas într-un limbaj accesibil (link inaccesibil) . Data accesului: 5 iulie 2013. Arhivat din original pe 7 iulie 2013. (nedefinit)
- ↑ Întrebați profesorul Markup: Î. Există o pânză 3D? (link indisponibil) . Data accesului: 7 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ Animații avansate cu requestAnimationFrame (downlink) . Consultat la 8 februarie 2013. Arhivat din original pe 11 februarie 2013. (nedefinit)
- ↑ 1 2 Cum să dezlănțuiți puterea HTML5 Canvas pentru jocuri . Consultat la 3 noiembrie 2013. Arhivat din original pe 3 noiembrie 2013. (nedefinit)
- ↑ 1 2 Îmbunătățirea performanței HTML5 Canvas - HTML5 Rocks . Consultat la 3 noiembrie 2013. Arhivat din original pe 4 noiembrie 2013. (nedefinit)
- ↑ 1 2 3 4 5 6 Care sunt avantajele/dezavantajele Canvas vs. DOM în dezvoltarea jocurilor JavaScript? . Consultat la 3 noiembrie 2013. Arhivat din original pe 4 noiembrie 2013. (nedefinit)
- ↑ Pânză accelerată hardware în Google Chrome . Consultat la 3 noiembrie 2013. Arhivat din original pe 3 noiembrie 2013. (nedefinit)
Link -uri
Exemple de lucru
Pentru informații
Grafică pe Web |
---|
Vector |
|
---|
Raster |
|
---|