Canvas (HTML)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2016. április 29-én felülvizsgált verziótól ; az ellenőrzések 24 szerkesztést igényelnek .

A Canvas ( eng.  canvas  - " canvas ", rus. kanvas ) egy HTML5 elem , amelyet kétdimenziós bittérképes kép létrehozására terveztek szkriptek segítségével, általában JavaScriptben [1] . A blokk eredete a bal felső sarokban található. A [2] blokk minden eleme ebből épül fel . A koordinátatér mérete nem feltétlenül tükrözi a ténylegesen megjelenített terület méretét [2] . Alapértelmezés szerint szélessége 300 pixel, magassága 150 [2] .

Általában grafikonok rajzolására használják cikkekhez és bizonyos böngészőjátékok játékteréhez. De arra is használható, hogy videót ágyazzon egy oldalba, és teljes értékű lejátszót készítsen.

A WebGL -ben a 3D grafika hardveres gyorsítására használják [ 3] .

explorercanvas JavaScript-könyvtárat a Google adta ki. Archivált 2013. február 11. , amely lehetővé tette a Canvas használatát IE7 és IE8 böngészőkben.

A vászon megnehezítheti a robotok számára a Captchák felismerését . Canvas használatakor nem egy kép töltődik be a szerverről, hanem egy ponthalmaz (vagy egy rajzalgoritmus), amely szerint a böngésző képet rajzol (captcha) [4] .

Történelem

Az elemet canvaselőször az Apple vezette be a Mac OS X rendszerhez készült WebKit motorban , azzal a céllal, hogy később Dashboard és Safari alkalmazásokban is felhasználhassa [1] .

A vászon hiányát az IE-ben a Google úgy javította ki , hogy kiadta saját, JavaScriptben írt kiterjesztését ExplorerCanvas [5] néven .

A vásznat a mai napig gyakrabban használják grafikonok készítésére, egyszerű animációra és játékokra a böngészőkben [6] . A WHATWG a vászon használatát javasolja szabványként a webalkalmazások új generációiban való grafika létrehozásához [7] .

A Mozilla Alapítványnak van egy Canvas 3D nevű projektje [8] , amelynek célja a grafikus gyorsítók alacsony szintű támogatása a 3D képek megjelenítéséhez a HTML canvas elemen keresztül. Emellett vannak olyan könyvtárak, amelyek háromdimenziós modellekkel valósítják meg a munkát , köztük három

Támogatás

AZAZ Firefox szafari Króm Opera iOS Android
9,0+ 3.0+ 3.0+ 3.0+ 10,0+ 3.0+ 1.0+

Jellemzők

canvaslehetővé teszi, hogy a vászonra helyezze: kép, videó, szöveg. Töltsd ki az egészet egyszínűvel, vagy húzd végig a körvonalakat, vagy akár adj hozzá színátmenetet [9] . A css3 box-shadow és text-shadow tulajdonságokhoz hasonló árnyékok hozzáadása. Végül pedig alakzatok rajzolása vezérlőpontok megadásával. Sőt, mind a vonalak szélességét, mind a vonalrajzoló ecsetet, a vonalkötések stílusát módosíthatja [10] .

Jellemzők

Optimalizálási példák vagy minták

Ha nem kell újrarajzolnia a vásznat, hanem manipulálnia kell, akkor "lefényképezheti" a teljes vásznat, és elmentheti egy változóba. És dolgozzon már ezzel a rajzzal anélkül, hogy minden manipuláció után rákényszerítené a vászon rajzolását.

Ha nem a teljes képet kell frissíteni, hanem csak egy részét, akkor törölhet egy bizonyos területet a vászonról, és újra rajzolhatja.

A böngészők optimalizálhatják az egyidejűleg futó animációkat azáltal, hogy egyre csökkentik az áttördelések és átfestések számát, ami viszont javítja az animáció pontosságát. Például CSS-átmenetekkel vagy SVG SMIL-lel szinkronizált JavaScript-animációk. Ráadásul, ha egy animációt egy láthatatlan lapon hajtanak végre, a böngészők nem folytatják az újrarajzolást, ami csökkenti a CPU-, GPU- és memóriahasználatot, és ennek következtében csökken az akkumulátorfogyasztás a mobileszközökön [15] . Ehhez használja a requestAnimationFrame-et.

Az összes jelenlegi böngészőben van képelmosódás szűrő nagyításkor. Akkor érdemes használni, ha gyakran pixelenként dolgozza fel a képet. A képet például felére csökkentve, majd hardveresen szűrő segítségével növelve [16] .

Ha a játék lehetővé teszi a játék hátterének és elemeinek külön feldolgozását, akkor célszerű két vásznat egymásra tenni [17] .

A vászon törléséhez a legjobb módszer a clearRect [17] használata , azonban ha csak a szükséges területeket töröljük, akkor a sebesség még tovább nő.

Kritika

Előnyök

Használat

Az elem használata és műveletei csak JavaScripten keresztül lehetségesek.

<!doctype html> < html lang = "en" > < head > < title > canvas </ title > < script src = "example.js" ></ script > </ head > < body > < canvas id = " canvas" > Ez az elem nem támogatott </ canvas > </ body > </ html >

example.js fájl

var canvas = dokumentum . getElementById ( 'vászon' ), ​​context = vászon . getContext ( '2d' ); function onLoadHandler () { /* Csinálj valamit a vászonnal next */ } window . onload = onLoadHandler ;

Példák

JavaScript használata kör rajzolásához < html lang = "en" > < head > < title > circle </ title > </ head > < body > < canvas id = "example" > A böngésző frissítése </ canvas > < script > var canvas = document . getElementById ( 'example' ), context = canvas . getContext ( '2d' ); function drawCircle ( x , y , r ) { kontextus . arc ( x , y , r , 0 , 2 * Math . PI , hamis ); } kontextus . beginPath (); rajzoljonCircle ( 150 , 75 , 50 ); összefüggésben . vonalszélesség = 15 ; összefüggésben . strokeStyle = '#0f0' ; összefüggésben . stroke (); </ script > </ body > </ html > Rendering vásznon egy pitagorasz-fa fújva < html > < head > < title > Pythagorean tree </ title > < script type = "text/javascript" > // függvény szögben húz egy vonalat egy meghatározott hosszúságú pontból ln function drawLine ( x , y , ln , szög ) { kontextus . mozogTo ( x , y ); összefüggésben . lineTo ( Math . round ( x + ln * Math . cos ( szög )), Math . round ( y - ln * Math . sin ( szög ))); } // A függvény megrajzolja a fafüggvényt drawTree ( x , y , ln , minLn , szög ) { if ( ln > minLn ) { ln = ln * 0,75 ; drawLine ( x , y , ln , szög ); x = Matek . kerek ( x + ln * Math . cos ( szög )); y = matematika . kerek ( y - ln * Math . sin ( szög )); rajzfa ( x , y , ln , minLn , szög + matematikai PI / 4 ) ; rajzfa ( x , y , ln , minLn , szög - Math . PI / 6 ); // ha beírod a Math.PI/4 szöget, akkor a klasszikus fa jön ki } } // Változók inicializálása function init () { var canvas = document . getElementById ( "fa" ), x = 100 + ( vászon . szélesség / 2 ), y = 170 + vászon . magasság , // szár helyzete ln = 120 , // kezdeti sorhossz minLn = 5 ; // minimális sorhosszúságú vászon . szélesség = 480 ; // Width of canvas canvas . magasság = 320 ; // vászon magasság kontextus = vászon . getContext ( '2d' ); összefüggésben . fillStyle = '#ddf' ; // háttérszín kontextus . strokeStyle = '#020' ; //vonal színkörnyezete . fillRect ( 0 , 0 , vászon . szélesség , vászon . magasság ); összefüggésben . vonalszélesség = 2 ; // vonalszélesség kontextus . beginPath (); rajzfa ( x , y , ln , minLn , matek . PI / 2 ); összefüggésben . stroke (); } ablak . onload = init ; </ script > </ head > < body > < canvas id = "fa" ></ canvas > </ body > </ html >

Könyvtárak

  • A libCanvas egy könnyű, de erőteljes vászon keretrendszer.
  • Processing.js – A Processing vizualizációs nyelv portja
  • Az EaselJS a Flash-hez hasonló API-val rendelkező könyvtár
  • PlotKit - diagramok és grafikák létrehozására szolgáló könyvtár
  • Rekapi – Canvas API animációk létrehozásához kulcskockákon
  • A PhiloGL egy WebGL keretrendszer adatvizualizációhoz, játékfejlesztéshez és kreatív kódoláshoz.
  • JavaScript InfoVis Toolkit – Interaktív 2D Canvas adatvizualizációt hoz létre a weben.
  • A Frame-Engine egy keretrendszer alkalmazások és játékok fejlesztéséhez.

Lásd még

Jegyzetek

  1. 1 2 Canvas Guide (MDN) . Letöltve: 2015. március 23. Az eredetiből archiválva : 2015. március 30.
  2. 1 2 3 4.12.4 A vászon elem - HTML szabvány . Archiválva az eredetiből 2009. április 27-én.
  3. Canvas (MDN) . Letöltve: 2015. március 23. Az eredetiből archiválva : 2015. március 25.
  4. Példa a captcha pontok szerinti felépítésére Archiválva : 2013. december 19.
  5. explorercanvas (downlink) . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. február 11. 
  6. A Google a HTML5-öt játékplatformként hirdeti (lefelé mutató link) . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. február 11. 
  7. A WHATWG specifikációja (a hivatkozás nem elérhető) . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. február 11. 
  8. Mozilla Canvas 3D . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. március 12.
  9. Színátmenetek (elérhetetlen link) . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. február 11. 
  10. Dolgozzunk vonalakkal (elérhetetlen link) . Letöltve: 2013. február 8. Az eredetiből archiválva : 2013. február 11.. 
  11. Lehetséges "újratölteni" a vásznat? // Kérdezze meg Markap professzort (a link nem elérhető) . Hozzáférés dátuma: 2013. július 5. Eredetiből archiválva : 2013. július 7. 
  12. Vászonkoordináták (nem elérhető link) . Hozzáférés dátuma: 2013. július 5. Eredetiből archiválva : 2013. július 7. 
  13. Vászontranszformációk elérhető nyelven (elérhetetlen hivatkozás) . Hozzáférés dátuma: 2013. július 5. Eredetiből archiválva : 2013. július 7. 
  14. Kérdezze meg Markup professzort: K. Létezik 3D vászon? (nem elérhető link) . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. február 11. 
  15. Speciális animációk requestAnimationFrame-mel (lefelé irányuló kapcsolat) . Letöltve: 2013. február 8. Az eredetiből archiválva : 2013. február 11.. 
  16. 1 2 Hogyan szabadítsuk fel a HTML5 Canvas erejét játékokhoz . Letöltve: 2013. november 3. Az eredetiből archiválva : 2013. november 3..
  17. 1 2 A HTML5 Canvas teljesítményének javítása – HTML5 Rocks . Letöltve: 2013. november 3. Az eredetiből archiválva : 2013. november 4..
  18. 1 2 3 4 5 6 Mik az előnyei/hátrányai a Canvas vs. DOM a JavaScript játékfejlesztésben? . Letöltve: 2013. november 3. Az eredetiből archiválva : 2013. november 4..
  19. Hardveresen gyorsított vászon a Google Chrome-ban . Letöltve: 2013. november 3. Az eredetiből archiválva : 2013. november 3..

Linkek

Munka példák Információért