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
- A vászon magasságának vagy szélességének módosítása törli annak teljes tartalmát és beállításait, vagyis újból létrejön [11] ;
- A referenciapont (0,0 pont) a bal felső sarokban található [12] . De el lehet tolni [13] ;
- Nincs 3D kontextus, vannak külön fejlesztések, de azok nincsenek szabványosítva [14] ;
- A szöveg színe azonban ugyanúgy megadható, mint a CSS, valamint a betűméret.
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
- Túlságosan terheli a processzort és a RAM-ot;
- A szemétgyűjtő korlátozottsága miatt nincs mód a memória megtisztítására;
- A tárgyakkal kapcsolatos eseményeket magának kell feldolgoznia [18] ;
- Gyenge teljesítmény nagy felbontás mellett [18] ;
- Minden elemet külön kell megrajzolni [18] .
- Az oldalakon speciális „jelzőfények” létrehozásának lehetősége, az ún. Vászon ujjlenyomat , a felhasználók nyomon követéséhez az interneten.
Előnyök
- Az SVG-vel ellentétben sokkal kényelmesebb sok elem kezelése;
- Hardveres gyorsítással rendelkezik [16] [19] ;
- Minden pixelt manipulálhat [18] ;
- Alkalmazhat képfeldolgozó szűrőket [18] ;
- Számos könyvtár létezik [18] .
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 2 Canvas Guide (MDN) . Letöltve: 2015. március 23. Az eredetiből archiválva : 2015. március 30. (határozatlan)
- ↑ 1 2 3 4.12.4 A vászon elem - HTML szabvány . Archiválva az eredetiből 2009. április 27-én. (határozatlan)
- ↑ Canvas (MDN) . Letöltve: 2015. március 23. Az eredetiből archiválva : 2015. március 25. (határozatlan)
- ↑ Példa a captcha pontok szerinti felépítésére Archiválva : 2013. december 19.
- ↑ explorercanvas (downlink) . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. február 11. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ Mozilla Canvas 3D . Hozzáférés dátuma: 2013. február 7. Az eredetiből archiválva : 2013. március 12. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ Dolgozzunk vonalakkal (elérhetetlen link) . Letöltve: 2013. február 8. Az eredetiből archiválva : 2013. február 11.. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ 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. (határozatlan)
- ↑ 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.. (határozatlan)
- ↑ 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.. (határozatlan)
- ↑ 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.. (határozatlan)
- ↑ 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.. (határozatlan)
- ↑ Hardveresen gyorsított vászon a Google Chrome-ban . Letöltve: 2013. november 3. Az eredetiből archiválva : 2013. november 3.. (határozatlan)
Linkek
Munka példák
Információért
Grafika a weben |
---|
Vektor |
|
---|
Raszter |
|
---|