Canvas From Scratch Introducerea panzei

Acesta este primul articol dintr-o serie care vă va aduce la maxim viteza cu panza HTML5, funcționalitatea desenului fără pluginuri încorporată în browserele moderne. În acest articol introductiv, vă voi arăta cum să accesați elementul de panza, să desenați forme, să schimbați culorile și să ștergeți lucrurile. Este un tur al opțiunilor de bază ale acestei noi tehnologii Web uimitoare.


Prefer un Video Tutorial?


Schimbați rezoluția la 720 pentru o imagine mai clară.
Abonați-vă la pagina noastră YouTube pentru a viziona toate tutorialele video!

Seria va fi o plimbare interesantă și una pe care sper că vă bucurați. Presupun că sunteți deja confortabil cu JavaScript, dar aveți puțină experiență cu panza. Chiar dacă sunteți nou la JavaScript, nu vă îngrijorați, deoarece veți învăța în continuare ceva din aceste articole.


Introducerea Elementului Canvas

Folosirea elementului de pânză este ușoară.

Când vă gândiți la panza, probabil că vă gândiți la noul HTML5 pânză element. Din punct de vedere tehnic, aceasta este doar o jumătate din poveste, dar să uităm de asta deocamdată. pânză element este fața publică a acestei caracteristici noi de browser.

Utilizarea pânză elementul este mort ușor; este o etichetă HTML simplă, cu o lățime și înălțime definite.

   

Acest lucru nu face încă multe. De fapt, tot ce face este inserarea unei pagini transparente în pagină. Conținutul din interiorul pânză elementul este un conținut de rezervă, care va fi afișat numai dacă un browser nu acceptă panza.

Suport pentru browser

Suportul de browser pentru panza este destul de uimitor.

Este important să subliniem că suportul browserului pentru pânză este destul de uimitor. Fiecare browser modern îl acceptă, inclusiv cel mai recent Internet Explorer.

  • Internet Explorer (9.0+)
  • Safari (3.0+)
  • Firefox (3.0+),
  • Chrome (3.0+)
  • Opera (10.0+)
  • iOS (1.0+)
  • Android (1.0+)

Interesant este faptul că puteți utiliza o funcție de panza în Internet Explorer versiunea 8 și mai jos, prin pluginul ExplorerCanvas.

Dimensiunile canvasului

O lecție cheie pe care am învățat-o cu panza este că trebuie să setați în mod explicit lăţime și înălţime atributele pânză element în definirea dimensiunilor sale. Folosind CSS pentru a seta lățimea și înălțimea va provoca în mod efectiv panza la scară în sus (sau în jos) la această dimensiune. Există un motiv logic în spatele acestei situații; are de a face cu pânză element fiind un container pentru ceva numit contextul de redare 2d. Cu toate acestea, este important să știți că utilizarea CSS pentru a seta dimensiunile panzei va avea un efect ciudat.


Descoperirea contextului 2d de redare

Am menționat în ultima secțiune că pânză element este doar o jumătate din poveste. Cealaltă jumătate este contextul de redare 2d; partea de panza care vă permite să faceți lucrurile reale pe care le puteți vedea de fapt.

Permiteți-mi să fac un lucru complet clar: atunci când utilizați panza, nu vă desenați pânză element. În schimb, de fapt, folosiți contextul de redare 2d, pe care îl accesați prin pânză element prin API-ul JavaScript. Nu contează cu adevărat în marea schemă a lucrurilor, dar este util să știm.

Sistem de coordonate

Dacă ați utilizat deja limbi de programare grafică 2d (ActionScript, Procesare, etc), atunci veți afla totul despre sistemele de coordonate bazate pe ecran. Contextul de redare 2d în panza nu este diferit; utilizează un sistem standard de coordonate carteziene, cu punctul de origine (0, 0) în partea stângă sus. Deplasarea spre dreapta va crește valoarea lui X axă, în timp ce se deplasează în jos va crește valoarea lui y axă. E destul de simplu.

O unitate din sistemul de coordonate este egală cu un pixel pe ecran (în majoritatea cazurilor).

Accesarea contextului de redare 2d

Pentru a utiliza efectiv contextul de redare 2d, va trebui să utilizați JavaScript API. Partea API pe care doriți să o utilizați este getContext astfel:

    Canvas de la zero          

Notă: folosiți jQuery aici, dar numai pentru a verifica când DOM este gata. Puteți folosi biblioteca JavaScript preferată sau plasați codul în partea de jos a documentului.

Ca urmare a chemării getContext, CTX variabila va conține acum o referință la contextul de redare 2d. Acest lucru înseamnă că acum aveți totul în loc pentru a începe de fapt, atragerea pe pânză. Partea distractivă!


Desenarea dreptunghiurilor

Acum că aveți acces la contextul de redare 2d, puteți începe să apelați metodele de desenare ale API. Una dintre cele mai de bază este fillRect, care trage un dreptunghi care este completat într-o anumită culoare (negru în mod implicit).

Adăugați codul de mai jos CTX variabilă de la început:

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

Acest lucru va atrage un pătrat negru care este ușor depărtat de marginea stângă și de sus a pânzei, după cum urmează:

Tocmai ți-ai atras prima formă folosind panza HTML5. Se simte bine, corect?

Notă: Veți observa că utilizați metoda dreptunghiulară a API-ului JavaScript pentru a desena pătrate. Acest lucru se datorează faptului că nu există metode în panza pentru a desena pătrate direct, simplu, deoarece pătrate sunteți dreptunghiuri (au patru laturi cu unghiuri drepte între ele).

Există patru argumente într-un apel pentru fillRect:

  • Primul este X poziția punctului de origine (partea stângă sus).
  • Al doilea este y poziția punctului de origine.
  • Al treilea este lăţime.
  • Și a patra este înălţime.

Scrisul este pseudocod, fillRect ar arata astfel:

 ctx.fillRect (x, y, lățime, înălțime);

Lucrul cool este că nu vă limitați doar la dreptunghiuri pline. Nu. Puteți, de asemenea, să desenați dreptunghiuri mută; adică, dreptunghiuri cu un contur în jurul lor. În acest scop puteți utiliza strokeRect metoda de API JavaScript, cum ar fi:

 ctx.strokeRect (50, 50, 100, 100);

Folosește exact aceleași argumente ca și fillRect, iar rezultatul va fi o schiță minunată a unui pătrat:

Simplu. Elegant. Uşor. Asta însumează pânză. Toate metodele sunt simple atunci când te uiți în mod individual, dar când sunt utilizate împreună, ele vă permit să desenați niște lucruri destul de uimitoare.


Cale de trasare

În afară de dreptunghiurile (singurele forme care pot fi desenate cu o singură metodă API), aveți căi. Căile vă permit să desenați linii, atât drepte, cât și curbate, care pot fi combinate pentru a crea forme destul de complexe.

Desenarea unei căi simple necesită utilizarea a câteva metode noi API:

  • beginPath începe o nouă cale.
  • MoveTo mută punctul din care este trasată calea.
  • lineTo trasează o cale dreaptă la acest punct din punctul definit în moveTo sau punctul de la ultimul apel la lineTo.
  • closePath închide calea prin conectarea ultimului punct la punctul de pornire.
  • completati umple calea cu o culoare.
  • accident vascular cerebral schițează calea.

Încercați următorul cod:

 ctx.beginPath (); ctx.moveTo (50, 50); ctx.lineTo (50, 250); ctx.lineTo (250, 250); ctx.closePath (); ctx.fill ();

Care va trasa o cale triunghiulară și o va umple:

Puteți utiliza același concept pentru a desena orice altă formă pe care o doriți. Cel de-al doilea articol din această serie va cuprinde mai multe căi avansate în panza, cum ar fi arce (pentru a crea cercuri) și căi Bezier (pentru a crea linii curbe reci).

Lucrul important pe care trebuie să-l amintiți acum este că căile sunt aproape singura modalitate de a atrage ceva mai complicat decât un dreptunghi.


Schimbarea culorii

Până acum, tot ce ați desenat a fost umplut sau mângâiat în negru. Ce palpitant! Din fericire, există câteva proprietăți în API-ul JavaScript care vă permit să modificați culoarea formelor pe care le desenați. Aceste proprietăți sunt stil de completare și strokeStyle.

Ambele sunt destul de explicative, deci hai să intrăm și să schimbăm culoarea de umplere a unui dreptunghi:

 ctx.fillStyle = "rgb (255, 0, 0)"; ctx.fillRect (50, 50, 100, 100);

Acest lucru vă va oferi un pătrat roșu frumos, după cum urmează:

Sau puteți schimba culoarea stoke-ului unui dreptunghi:

 ctx.strokeStyle = "rgb (255, 0, 0)"; ctx.strokeRect (50, 50, 100, 100);

Care vă va oferi un pătrat cu un contur roșu:

Frumusețea lui stil de completare și strokeStyle este că ambele acceptă valori normale ale culorii CSS. Asta inseamna ca poti folosi RGB, RGBA, HSA, cuvintele de culoare (ex. "Rosu") si valorile hexazecimale.

Merită să se arate că schimbarea culorii în panza nu va afecta nimic care a fost deja tras. De exemplu, dacă trageți un dreptunghi negru, schimbați stilul de umplere în roșu, apoi trageți un alt dreptunghi; primul dreptunghi va fi în continuare negru.


Modificarea lățimii liniei

În afară de schimbarea culorii, puteți modifica și lățimea unei contururi curbate. Pentru a face acest lucru puteți folosi lățimea liniei proprietatea API-ului JavaScript.

Utilizând codul din exemplul anterior, puteți schimba lățimea conturului:

 ctx.lineWidth = 20; ctx.strokeStyle = "rgb (255, 0, 0)"; ctx.strokeRect (50, 50, 100, 100);

Ceea ce vă va oferi un accident vascular cerebral red și frumos:

Același concept funcționează și pentru căi. De exemplu, puteți schimba triunghiul de mai devreme pentru a avea o contur mai gros:

 ctx.lineWidth = 20; ctx.beginPath (); ctx.moveTo (50, 50); ctx.lineTo (50, 250); ctx.lineTo (250, 250); ctx.closePath (); ctx.stroke ();

Care vă va oferi un triunghi incredibil de interesant:

Există, de asemenea, câteva alte caracteristici ale API-ului JavaScript care vă permit să schimbați modul de trasare a liniilor. De exemplu, lineCap modifică modul în care arată sfârșitul unei linii și lineJoin modifică modul în care arată colțurile într-o linie. Ar trebui să verificați cu siguranță aceste caracteristici (și mai mult) în caietul de sarcini panza.


Ștergerea panzei

Ultimul lucru pe care vreau să vă învăț este să ștergeți pânza. Ați învățat cum să desenați forme, dar nu cum să scapi de ele, ceea ce poate fi destul de util.

Din fericire, ștergerea panzei este ușoară; aveți nevoie doar de o metodă din API-ul JavaScript. Această metodă este clearRect, și sarcina sa este de a face ca fiecare pixel din cadrul dreptunghiului să fie transparent.

În acest articol, panza are o lățime de 500 pixeli și o înălțime de 500 de pixeli, astfel încât să puteți șterge cu ușurință întreaga panza prin apelare clearRect ca astfel:

 ctx.fillRect (50, 50, 100, 100); ctx.clearRect (0, 0, 500, 500);

Nu este util să vă arătați o captură de ecran a acestui lucru, deoarece dacă ar fi funcționat ar trebui să vedeți absolut nimic. Dreptunghiul umplut este de fapt atras, dar este instantaneu curățat după aceea, deci nu-l vezi.

Notă: Argumentele din clearRect sunt aceleași ca și fillRect; X, y, lăţime și înălţime.

Dacă nu sunteți sigur de lățimea și înălțimea pânzei, puteți, de asemenea, să o ștergeți astfel:

 ctx.clearRect (0, 0, canvas.width, canvas.height);

Aceasta utilizează lăţime și înălţime proprietățile pânză element, care este incredibil de util și o modalitate mult mai bună de a face lucrurile.

Ștergerea unei mici secțiuni a pânzei

Nu trebuie să ștergi întreaga pânză dacă nu vrei. Puteți șterge destul de ușor doar o mică parte. De exemplu, imaginați-vă că aveți un pătrat negru desenat lângă un pătrat roșu:

 ctx.fillRect (50, 50, 100, 100); ctx.fillStyle = "rgb (255, 0, 0)"; ctx.fillRect (200, 50, 100, 100);

Care ar arăta în mod normal în felul următor:

Ați putea șterge pătratul negru și lăsați pătratul roșu intact adăugând un apel la clearRect dedesubt:

 ctx.clearRect (50, 50, 100, 100);

Observați cum acest apel pentru clearRect definește o poziție și o dimensiune care este identică cu pătratul negru. Acest lucru înseamnă în esență că va schimba numai pixelii din zona pătratului la negru transparent (eliminându-i):

Foarte drăguț, nu-i așa? Ștergerea panzei nu este ceva ce veți folosi mult cu desene statice, dar este ceva pe care veți folosi multe atunci când învățați să animați mai târziu în această serie.


Înfășurarea lucrurilor

Canvasul este ușor de folosit, rapid de învățat și mort puternic când îl împingeți la limită.

Deci, așa cum sper că puteți vedea, pânza este o parte deosebit de puternică a browserului. Acesta vă permite să creați grafică, utilizând codul și fără a utiliza un singur plugin. Este ușor de folosit, este ușor de învățat și este puternic mort atunci când o împingeți la limită.

În articolul următor, veți privi unele dintre cele mai avansate caracteristici ale panzei, cum ar fi cercurile de desen, căile curbe și ceva numit starea desenului. Și dacă acest lucru nu este de ajuns, mai târziu în serie veți privi cum să transformați desenele (cum ar fi rotația și scala), cum să manipulați imaginile și să închei cu o privire cum să animați. Va fi foarte interesant, crede-mă.

Pentru moment, sper că ți-am dat suficient pentru a-ți acoperi apetitul pentru pânză și pentru a ieși și a afla mai multe despre el. Panza este o tehnologie fantastică care merită înțeleasă, chiar dacă nu intenționați să o utilizați imediat.

Cod