HTML & LT; Canvas & GT; Element er en kraftfuld løsning til oprettelse af pixelbaseret grafik på nettet ved hjælp af JavaScript. , og vil give dig mulighed for at skabe nogle bemærkelsesværdige effekter med en smule praksis.
I denne tutorial tager vi et kig på at oprette et lærredobjekt, tegne enkle billeder på det og animere disse visuelle.
Canvas er fundamentalt et HTML-element, som du placerer på siden, skalaen for at dække det ønskede område og kan derefter trække på. For at komme i gang skal vi oprette en simpel side med et lærredobjekt.
& lt;! DOCTYPE HTML & GT;
& lt; html & gt;
& lt; hoved & gt;
& lt; meta charset = 'utf-8' / & gt;
& lt; titel & gt; html lærred demo & lt; / titel & gt;
& lt; link rel = 'stylesheet' href = 'custom.css' / & gt;
& lt; script src = "canvas.js" & gt; & lt; / script & gt;
& lt; / Head & GT;
& lt; body & gt;
& lt; lærred ID = "HTML-Canvas" & GT;
& lt; / body & gt;
& lt; / HTML & GT;
For at give os masser af plads til at lege med, vil vi have vores lærred til at fylde hele skærmen. Vi vil også give det en sort baggrund, så du ved, at det er helt sikkert der. Dette kan faktisk være lidt vanskeligt at gøre uden at ende med rullebjælker eller hvidt rum. CSS nedenfor skal tage sig af det.
Canvas {
Højde: 100Vh;
Bredde: 100VW;
position: absolut;
Baggrundsfarve: # 000000;
}
Margin: 0;
Padding: 0;
}
Dernæst skal vi tilføje nogle JavaScript for at oprette lærredet klar til brug. Vi får det til at hænge en domcontentloaded begivenhed for at sikre, at scriptet ikke forsøger at køre, før lærredelementet er klar. Vi vil også få det til at sætte lærredsopløsningen for at matche det område, det dækker - ellers vil lærredet skalere op uden at øge opløsningen, hvilket fører til sløret eller pixelleret grafik.
DOCUMENT.ADDEVENTLISTENER ("DOMCONTENTLOASE", FUNKTION () {
Var Canvas = Document.GetelementById ("HTML-Canvas");
Var Circles = [];
Var radius = 50;
Canvas.width = Canvas.clientwidth;
Canvas.Height = Canvas.clientHeight;
var kontekst = lærred.getcontext ("2d");
}, falske);
Du vil bemærke, at vi i sidste trin kaster vi noget, der hedder en 'kontekst'. Sådan opstår tegning på lærred. Det er nemmest at tænke på sammenhængen som en pensel, som vi kan bruge til at tegne forskellige linjer, buer og grundlæggende former.
Det, vi nu kan gøre, er at sætte vores sammenhæng til at bruge ved at skrive en drawcircle-funktion, der vil skabe en 360-graders bue - det vil sige en cirkel. Vi gør dette ved at fortælle konteksten for at definere en bue, sætte stilarter til grænsen og fylde, så stiger fyldningen () og slagtilfælde () funktioner til faktisk at tegne formen (slagtilfælde trækker grænsen).
Funktion Drawcircle (X, Y, Radius, Border, Border_colour, Fill_colour)
{
kontekst.beginpath ();
kontekst.arc (x, y, radius, 0,2 * math.pi);
kontekst.strokestyle = border_colour;
kontekst.fillstyle = fill_colour;
kontekst.linewidth = grænsen;
kontekst.closepath ();
kontekst.fyld ();
kontekst.Stroke ();
}
Store. Vi har en funktion, der kan tegne cirkler. Nu har vi brug for noget at tegne. Lad os udvide koden fra trin 3 for at oprette et array, der beskriver cirkelobjekter. Det vil gemme hver cirkel x og y koordinater, farve og en retningsværdi.
Vi opretter denne array struktur snarere end bare at trække cirkler straks, fordi det vil gøre det muligt for os at animere cirklerne ved at genskabe indholdet af arrayet senere.
For (var I = 0; I & LT; 20; I ++) {
var x = radius + (math.random () * (lærred.width - (2 * radius)));
VAR Y = RADIUS + (Math.Random () * (Canvas.Height - (2 * radius)));
var farve = randomcolour ();
VAR Direction = Math.Random () * 2.0 * math.pi;
circles.push ({x: x, y: y, farve: farve, retning: retning});
tegne(); }
I det sidste trin har vi brugt et par nye funktioner, der ikke er blevet defineret endnu. Lad os starte med RandomColour (). Dette vil være en hjælpefunktion, der returnerer en randomiseret hexadecimal streng, der repræsenterer en farve. Det er ret ligetil at implementere.
Funktion RandomColour () {
VAR CARS = '0123456789ABCDEF';
var farve = '#';
for (var I = 0; I & LT; 6; I ++) {
farve + = chars [math.floor (math.random () * 16)];
}
returnere farve; }
Nu er vi klar til at bringe ting sammen ved at implementere tegningen () funktionen. Dette vil gøre to vigtige ting. For det første vil det rydde lærredet ved hjælp af ClearRect () -funktionen. Dette vil være vigtigt, når vi kommer til at animere vores cirkler for at undgå at tegne den nye ramme over toppen af den gamle. Det vil så gentage gennem arrayet vi konstruerede og tegne hver cirkel på lærredet i rækkefølge ved hjælp af vores trækkredsfunktion.
Funktion Draw () {
kontekst.clearrect (0, 0, lærred.width, lærred.Height);
circles.foreach (funktion (cirkel) {
trækkreds (cirkel.x, cirkel.y, radius, 5, cirkel.colour, cirkel.colour);
}); }
Hvis du prøver det nu, vil du se nogle statiske cirkler malet på siden. Men vi ønsker at animere dem. For at gøre dette skal vi udvide vores tegning () funktion på et par måder. For det første bruger vi Circle.Direction-værdien, vi skubbede til arrayet for at beregne ændringer i X og Y position for cirklen.
Derefter bruger vi en indbygget funktion kaldet RequestAnimationFrame, der rekursivt kalder tegningen () funktionen. RequestAnimationFrame gør det muligt for browseren at bestemme, hvornår du skal ringe til funktionen igen, idet man undgår behovet for at gennemføre timere for at beregne, hvornår du skal tegne den næste ramme.
Funktion Draw () {
kontekst.clearrect (0, 0, lærred.width, lærred.Height);
circles.foreach (funktion (cirkel) {
cirkel.x = cirkel.x + math.cos (cirkel.direction);
cirkel.y = cirkel.y + math.sin (cirkel.direction);
trækkreds (cirkel.x, cirkel.y, radius, 5, cirkel.colour, cirkel.colour);
});
RequestanimationFrame (Draw);
}
Der er dog en ting, der stadig mangler. Cirklerne forsvinder nu bare ud af kanten af skærmen. Lad os få dem til at hoppe tilbage. For at gøre dette, tilføjer vi et opkald til en ny funktion, hoppe (cirkel), inden for foreach-loop af tegnefunktionen ().
Bounce-funktionen bestemmer, hvornår en cirkel er i kanten af skærmen, og justerer dens retningsværdi korrekt.
Funktionshop (cirkel) {
IF (((Circle.x - Radius) & LT; 0) || 0) || ((cirkel.x + radius) & gt; lærred.width) || ((cirkel. Y + RADIUS) & GT; Canvas.Height)) {
Circle.Direction + = (math.pi / 2);
}
hvis (cirkel.direction & gt; (2 * math.pi)) {
Circle.Direction - = (2 * math.pi);
}
}
Denne artikel optrådte oprindeligt i Webdesigner Udgave 266. Køb det her.
Relaterede artikler:
(Billedkredit: Mabel Wynne) At lære at redigere en video på Tiktok, ville sandsynligvis ikke have været noget, du ..
(Billedkredit: Bulma) Vil du komme i gang med at bruge Bulma? Du er på det rigtige sted. Bulma er en populær CSS-ra..
Arbejde fjernt er blevet meget mere almindeligt i webudvikling i løbet af de sidste par år. Før versionskontrol ville arbejdet..
Kærlighed tabt af Canada's. JAM3. Er et smukt mørkt mobil-klar interaktivt digt med ægte hjerte om de vedvarende føle..
Bliver bedt om at beskrive min maleri teknik er mærkeligt for mig, og ærligt er det svært at gøre. Jeg er en i..
Ved brug af pastel primers. For at skabe overflader til din kunst betyder, at du kan opbygge en mere struktureret ..
I lang tid nu har jeg siddt i en rut med min 3D Art. . Ikke med at skabe modeller eller scener - jeg er altid tilf..