Lærred (HTML)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 29. april 2016; checks kræver 24 redigeringer .

Canvas ( eng.  canvas  - " canvas ", rus. kanvas ) er et HTML5 - element designet til at skabe et todimensionelt bitmapbillede ved hjælp af scripts, normalt i JavaScript [1] . Blokkens oprindelse er øverst til venstre. Hvert element i blokken [2] er bygget af det . Størrelsen af ​​koordinatrummet afspejler ikke nødvendigvis størrelsen af ​​det faktisk viste område [2] . Som standard er dens bredde 300 pixels, og dens højde er 150 [2] .

Det bruges som regel til at tegne grafer for artikler og spillefeltet i nogle browserspil. Men det kan også bruges til at indlejre en video på en side og skabe en fuldgyldig afspiller.

Anvendes i WebGL til hardwareacceleration af 3D-grafik [3] .

explorercanvas JavaScript-bibliotek udgivet af Google Arkiveret 11. februar 2013. , som gjorde det muligt at arbejde med Canvas i IE7 og IE8 browsere.

Canvas kan gøre det sværere for robotter at genkende Captchas . Ved brug af lærred indlæses ikke et billede fra serveren, men et sæt punkter (eller en tegnealgoritme), hvorefter browseren tegner et billede (captcha) [4] .

Historie

Elementet canvasblev først introduceret af Apple i WebKit -motoren til Mac OS X med henblik på dets efterfølgende brug i Dashboard- og Safari -applikationer [1] .

Manglen på lærred i IE er blevet rettet af Google ved at frigive sin egen udvidelse skrevet i JavaScript kaldet ExplorerCanvas [5] .

Til dato er lærred mere almindeligt brugt til graftegning, simpel animation og spil i browsere [6] . WHATWG foreslår at bruge lærred som standard til at skabe grafik i nye generationer af webapplikationer [7] .

Mozilla Foundation har et projekt kaldet Canvas 3D [8] , der har til formål at tilføje lavniveau-understøttelse af grafikacceleratorer til at vise 3D-billeder gennem HTML-lærredselementet. Hertil kommer biblioteker, der implementerer arbejdet med tredimensionelle modeller , heriblandt tre

Support

IE Firefox safari Chrome Opera iOS Android
9,0+ 3,0+ 3,0+ 3,0+ 10,0+ 3,0+ 1,0+

Funktioner

canvasgiver dig mulighed for at placere på lærredet: billede, video, tekst. Fyld det hele med en ensfarvet farve, eller streg konturerne, eller tilføj endda en gradient [9] . Tilføjelse af skygger svarende til egenskaberne css3 box-shadow og text-shadow. Og endelig, tegning af figurer ved at angive kontrolpunkter. Desuden kan du ændre både bredden af ​​linjerne og linjetegningspenslen, stilen af ​​linjeforbindelser [10] .

Funktioner

Optimeringseksempler eller mønstre

Hvis du ikke skal gentegne lærredet, men skal manipulere det, så kan du "tage et billede" af hele lærredet og gemme det til en variabel. Og arbejd allerede med denne tegning uden at tvinge lærredet til at blive tegnet efter hver manipulation.

Hvis ikke hele billedet skal opdateres, men kun en del af det, så kan du slette et bestemt område på lærredet og tegne det igen.

Browsere kan optimere animationer, der kører på samme tid, ved at reducere antallet af reflow og genmaling til én, hvilket igen vil forbedre nøjagtigheden af ​​animationen. For eksempel JavaScript-animationer synkroniseret med CSS-overgange eller SVG SMIL. Plus, hvis en animation udføres i en fane, der er usynlig, vil browsere ikke fortsætte med at tegne igen, hvilket vil føre til mindre CPU, GPU, hukommelsesforbrug og som et resultat reducere batteriforbruget i mobile enheder [15] . For at gøre dette skal du bruge requestAnimationFrame.

Alle nuværende browsere har et billedsløringsfilter, når der zoomes ind. Det skal bruges, hvis du ofte behandler billedet pixel for pixel. Ved at reducere billedet for eksempel til det halve og derefter øge det i hardware ved hjælp af et filter [16] .

Hvis spillet giver dig mulighed for separat at behandle baggrunden og elementerne i spillet, så giver det mening at lave to lærreder oven på hinanden [17] .

For at rydde lærredet er den bedste måde at bruge clearRect [17] , men hvis du kun rydder de nødvendige områder, så vil hastigheden stige endnu mere.

Kritik

Fordele

Brug

Brug og operationer på elementet er kun mulig gennem JavaScript.

<!doctype html> < html lang = "da" > < head > < title > canvas </ title > < script src = "example.js" ></ script > </ head > < body > < canvas id = " canvas" > Dette element er ikke understøttet </ canvas > </ body > </ html >

eksempel.js-fil

var lærred = dokument . getElementById ( 'lærred' ), ​​context = lærred . getContext ( '2d' ); function onLoadHandler () { /* Gør noget med lærredet næste */ } vindue . onload = onLoadHandler ;

Eksempler

Brug af JavaScript til at tegne en cirkel < html lang = "da" > < head > < title > cirkel </ title > </ head > < body > < canvas id = "example" > Opdater browseren </ canvas > < script > var canvas = document . getElementById ( 'eksempel' ), kontekst = lærred . getContext ( '2d' ); funktion tegneCirkel ( x , y , r ) { kontekst . bue ( x , y , r , 0 , 2 * Math . PI , falsk ); } kontekst . startPath (); drawCircle ( 150 , 75 , 50 ); kontekst . linjebredde = 15 ; kontekst . strokeStyle = '#0f0' ; kontekst . slagtilfælde (); </ script > </ body > </ html > Gengivelse på lærred af et blæst pythagoræisk træ < html > < head > < title > Pythagoras træ </ title > < script type = "text/javascript" > // funktion tegner en linje i vinkel fra et specificeret længdepunkt ln funktion drawLine ( x , y , ln , vinkel ) { kontekst . moveTo ( x , y ); kontekst . lineTo ( Math . round ( x + ln * Math . cos ( angle )), Math . round ( y - ln * Math . sin ( angle ))); } // Funktionen tegner træfunktionen drawTree ( x , y , ln , minLn , angle ) { if ( ln > minLn ) { ln = ln * 0,75 ; drawLine ( x , y , ln , vinkel ); x = Matematik . rund ( x + ln * Math . cos ( vinkel )); y = Matematik . rund ( y - ln * Math . sin ( vinkel )); drawTree ( x , y , ln , minLn , angle + Math . PI / 4 ); drawTree ( x , y , ln , minLn , angle - Math . PI / 6 ); // hvis du sætter vinklen Math.PI/4, så kommer det klassiske træ ud } } // Initialisering af variabler funktion init () { var canvas = document . getElementById ( "træ" ), x = 100 + ( lærred . width / 2 ), y = 170 + lærred . højde , // stammeposition ln = 120 , // initial linjelængde minLn = 5 ; // minimum linjelængde lærred . bredde = 480 ; // Bredde på lærreds lærred . højde = 320 ; // lærredshøjde kontekst = lærred . getContext ( '2d' ); kontekst . fillStyle = '#ddf' ; // baggrundsfarve kontekst . strokeStyle = '#020' ; // linjefarvekontekst . fillRect ( 0 , 0 , lærred . bredde , lærred . højde ); kontekst . linjebredde = 2 ; // linjebredde kontekst . startPath (); drawTree ( x , y , ln , minLn , Math . PI / 2 ); kontekst . slagtilfælde (); } vindue . onload = init ; </ script > </ head > < body > < canvas id = "tree" ></ canvas > </ body > </ html >

Biblioteker

  • libCanvas er en let, men kraftfuld lærredsramme.
  • Processing.js - En port af Visualiseringssproget Processing
  • EaselJS er et bibliotek med en API, der ligner Flash
  • PlotKit - et bibliotek til at lave diagrammer og grafik
  • Rekapi - Canvas API til at skabe animationer på keyframes
  • PhiloGL er en WebGL-ramme til datavisualisering, spiludvikling og kreativ kodning.
  • JavaScript InfoVis Toolkit - Opretter en interaktiv 2D Canvas-datavisualisering til internettet.
  • Frame-Engine er en ramme til udvikling af applikationer og spil.

Se også

Noter

  1. 1 2 Lærredsvejledning (MDN) . Hentet 23. marts 2015. Arkiveret fra originalen 30. marts 2015.
  2. 1 2 3 4.12.4 Lærredselementet - HTML Standard . Arkiveret fra originalen den 27. april 2009.
  3. Lærred (MDN) . Hentet 23. marts 2015. Arkiveret fra originalen 25. marts 2015.
  4. Et eksempel på at bygge captcha af dots Arkiveret 19. december 2013.
  5. explorercanvas (downlink) . Dato for adgang: 7. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  6. Google promoverer HTML5 som en spilleplatform (downlink) . Dato for adgang: 7. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  7. Specifikation fra WHATWG (link ikke tilgængeligt) . Dato for adgang: 7. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  8. Mozilla Canvas 3D . Dato for adgang: 7. februar 2013. Arkiveret fra originalen 12. marts 2013.
  9. Gradienter (utilgængeligt link) . Dato for adgang: 7. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  10. Lad os arbejde med linjer (utilgængeligt link) . Hentet 8. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  11. Er det muligt at "genindlæse" lærredet? // Spørg professor Markap (linket er nede) . Dato for adgang: 5. juli 2013. Arkiveret fra originalen 7. juli 2013. 
  12. Lærredskoordinater (ikke tilgængeligt link) . Dato for adgang: 5. juli 2013. Arkiveret fra originalen 7. juli 2013. 
  13. Lærredstransformationer i et tilgængeligt sprog (utilgængeligt link) . Dato for adgang: 5. juli 2013. Arkiveret fra originalen 7. juli 2013. 
  14. Spørg Professor Markup: Q. Findes der et 3D-lærred? (utilgængeligt link) . Dato for adgang: 7. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  15. Avancerede animationer med requestAnimationFrame (downlink) . Hentet 8. februar 2013. Arkiveret fra originalen 11. februar 2013. 
  16. 1 2 Sådan slipper du kraften i HTML5 Canvas løs til spil . Hentet 3. november 2013. Arkiveret fra originalen 3. november 2013.
  17. 1 2 Forbedring af HTML5 Canvas Ydeevne - HTML5 Rocks . Hentet 3. november 2013. Arkiveret fra originalen 4. november 2013.
  18. 1 2 3 4 5 6 Hvad er fordelene/ulemperne ved Canvas vs. DOM i JavaScript spiludvikling? . Hentet 3. november 2013. Arkiveret fra originalen 4. november 2013.
  19. Hardwareaccelereret lærred i Google Chrome . Hentet 3. november 2013. Arkiveret fra originalen 3. november 2013.

Links

Eksempler på arbejde Til orientering