Canvas: <canvas id="tutorial" width="150" height="150"></canvas> Canvas WYMAGA domykajacego taga.

Podobne dokumenty
Multimedia i interfejsy. Ćwiczenie 5 HTML5

Mazakiem po WWW czyli kilka słów o obiekcie «canvas»

WIZUALIZACJA INFORMACJI TEKSTOWEJ WSTĘP DO HTML 5 CANVAS

Element CANVAS. Grafika rastrowa w HTML5. Rysowanie na kanwie. Rysowanie napisów. Teksty Obrazy Animacje Interakcja Ramka formatowana za pomocą CSS

4. Rysowanie krzywych

Aplikacje internetowe

Poprzednia wersja HTML, HTML 4.01, pochodzi z Sieć od tego czasu zmieniła się znacznie.

Zajęcia nr 15 JavaScript wprowadzenie do JavaScript

Defilada - przykład wykorzystujący animowane modele Copperlicht. Andrzej P.Urbański Politechnika Poznańska

PyX jest pakietem Pythona do grafiki wektorowej. Pozawala zatem tworzyd pliki EPS oraz PDF.

Alfabetyczna lista stylów

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Pascal - grafika. Uruchomienie trybu graficznego. Moduł graph. Domyślny tryb graficzny

Inkscape. Narzędzia informatyki

Grafika Komputerowa Materiały Laboratoryjne

Aplikacje internetowe laboratorium HTML 5

HTML. Tim Berners-Lee

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

APLIKACJE INTERNETOWE 1 HTML - STRUKTURA STRONY INTERNETOWEJ

Ćwiczenie 2 Warstwy i kształty podstawowe

GIMP Grafika rastrowa (Ćwiczenia cz. 2)

Jarosław Kuchta Podstawy Programowania Obiektowego. Podstawy grafiki obiektowej

Tik Z wiadomości wstępne

I. Wstawianie rysunków

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Test z przedmiotu. Witryny i aplikacje internetowe

Utworzyliśmy właśnie fragment elementów, które będą imitować fotomanipulację kobietycyborga. W taki sposób prezentuje się nasz efekt:

Szybkie tworzenie grafiki w GcIde

Programowanie obiektowe i zdarzeniowe wykład 8 grafika i animacja

ZAZNACZENIA. Zaznaczenia (inaczej maski) służą do zaznaczania obszarów rysunku.

DOM i JavaScript DOM W3C

Animacje cz. 2. Rysujemy koło zębate

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Technologie Informacyjne Mechatronika 2012/2013 Turtle

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

Tło CSS 3. Gabriela Panuś

Copyright Packt Publishing First published in the English language under the title HTML5 Canvas Cookbook.

Sieciowe Technologie Mobilne. Laboratorium 2

Adobe InDesign rysowanie obiektów wektorowych- przygotowanie pracy

LIVE Gra w życie. LIVE w JavaScript krok po kroku. ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji

Wykład VII PASCAL - grafika;

Z CSS3 szybciej i przyjemniej

Ćwiczenie 1 Automatyczna animacja ruchu

Podczas tej lekcji przyjrzymy się, jak wykonać poniższy rysunek przy pomocy programu BobCAD-CAM

Wprowadzenie do języka HTML

4.3 WITRAś. 1. UŜywając polecenia Linia (_Line) narysować odcinek, podając jako punkt początkowy współrzędną 90,-300 i punkt końcowy 90,55.

1 Zrozumieć Flasha... 1 Co można zrobić za pomocą Flasha?... 2 Tworzenie obrazków do strony 3 Animowanie witryny 4 Tworzenie filmów

Grafika Komputerowa Materiały Laboratoryjne

Kurs Adobe Photoshop Elements 11

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Grafika PHP dla początkujących

Krok 2 Następnie kliknij raz na obszar roboczy za pomocą narzędzia Elipsa (L). Ustaw szerokość i wysokość tak, jak szerokość zaokrąglonego prostokąta.

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Algorytm SAT. Marek Zając Zabrania się rozpowszechniania całości lub fragmentów niniejszego tekstu bez podania nazwiska jego autora.

Tytuł oryginału: The Essential Guide to HTML5: Using Games to learn HTML5 and JavaScript

SterBox. Przygotowanie Strony Użytkownika

Znaczniki języka HTML

WSTĘP; NARZĘDZIA DO RYSOWANIA

1. OPEN OFFICE RYSUNKI

Powtórzenie materiału: CSS3 Spis treści

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

Lekcja 11 Gra komputerowa LASER

Dodatek A. Palety. QuarkXPress 4.1. Projekty praktyczne. Podstawowe palety

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Dokument hipertekstowy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Artykuł pochodzi z czasopisma PHP Solutions. Do ściągnięcia bezpłatnie ze strony:

Systemy multimedialne 2015

DOM i JavaScript DOM W3C

Adobe InDesign lab. 3 Jacek Wiślicki,

Unity 3D - własny ekran startowy i menu gry

Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)

Krok 1: Stylizowanie plakatu

Interakcje wizualno-muzyczne. Processing. w programowaniu obrazu. Piotr Welk

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

Wstęp 5 Rozdział 1. Przygotowanie do pracy 7. Rozdział 2. Rysowanie 19. Rozdział 3. Sceny, warstwy i obiekty 57. Rozdział 4.

INSTRUKCJA OBSŁUGI Iron

Górnicki Mateusz 17681

Edytor tekstu MS Word 2010 PL: grafika. Edytor tekstu MS Word umożliwia wstawianie do dokumentów grafiki.


TWORZENIE TORU KOLEJOWEGO DLA LOKOMOTYWY - ZABAWKI. W tym przewodniku stworzymy tor kolejowy pasujący do zabawki.

Adobe InDesign lab. 3 Jacek Wiślicki, Paweł Kośla

GNUPLOT Wprowadzenie. dr inż. Marzena Tefelska Wydział Fizyki Politechnika Warszawska 2015

6 Grafika 2D. 6.1 Obiekty 2D

Doskonalimy Rysowanie Kartka Bożonarodzeniowa

Krzysztof Sendor Słowa kluczowe Tworzenie schodów

Zasoby. Musimy zaimportować zasoby dla gry z Asset Store

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

9. Wymiarowanie. 9.1 Wstęp. 9.2 Opis funkcje wymiarowania. Auto CAD

Artykuł pochodzi ze strony Daniela Łysiaka do odwiedzenia której oczywiście zapraszam. Publikacja za zgodą Autora.

I. Menu oparte o listę

Ćwiczenie 14 Dmuchawce

Opis Edytora postaci Logomocji

Umieszczanie grafiki w dokumencie

Polecenie ŚWIATPUNKT - ŚWIATŁO PUNKTOWE

Wyprowadzanie znaku logo

Rysowanie Części 2D. Lekcja Druga. Podczas tej lekcji przyjrzymy się jak wykonać poniższy rysunek przy pomocy programu BobCAD-CAM.

Sieciowe Technologie Mobilne. Laboratorium 4

Cover sheet. WinCC (TIA Portal) FAQ Listopad 2012

Transkrypt:

Canvas: <canvas id="tutorial" width="150" height="150"></canvas> Canvas WYMAGA domykajacego taga. Kompatybilność wsteczna: <canvas id="stockgraph" width="150" height="150"> current stock price: $3.15 +0.15 </canvas> <canvas id="clock" width="150" height="150"> <img src="images/clock.png" width="150" height="150" alt=""/> </canvas> Szkielet: <html> <head> <title>canvas tutorial</title> <script type="text/javascript"> function draw(){ var canvas = document.getelementbyid('tutorial'); if (canvas.getcontext){ canvas.getcontext('2d'); </script> <style type="text/css"> canvas { border: 1px solid black; </style> </head> <body onload="draw();"> <canvas id="tutorial" width="150" height="150"></canvas> </body> </html> Przykład: <html> <head> <script type="application/javascript"> var canvas = document.getelementbyid("canvas"); if (canvas.getcontext) {

canvas.getcontext("2d"); ctx.fillstyle = "rgb(200,0,0)"; ctx.fillrect (10, 10, 55, 50); ctx.fillstyle = "rgba(0, 0, 200, 0.5)"; ctx.fillrect (30, 30, 55, 50); </script> </head> <body onload="draw();"> <canvas id="canvas" width="150" height="150"></canvas> </body> </html> Prostokąty: fillrect(x, y, width, height) - wypełniony prostokąt strokerect(x, y, width, height) - obrys prostokątu clearrect(x, y, width, height) - czyści obszar o danym obszarze. rect(x, y, width, height) - generuje ścieżkę w kształcie prostokąta Przykład: var canvas = document.getelementbyid('canvas'); if (canvas.getcontext) { canvas.getcontext('2d'); ctx.fillrect(25,25,100,100); ctx.clearrect(45,45,60,60); ctx.strokerect(50,50,50,50); Ścieżki: beginpath() - rozpoczyna nową ścieżkę, kolejne komendy rysujące są przekazywane w ścieżke. closepath() - kończy rysowanie ścieżki, kolejne polecenia są kierowane do kontekstu stroke() - rysuje krawędź fill() - rysuje wypełnienie moveto działa jak oderwanie długopisa od kartki papieru, rysuje niewidzialną

linie: lineto - rysuje linie między obecną pozycją a x,y arc(x, y, promień, kąt poczatkowy, kąt końcowy, odwrotnie do wskazówek zegara) - rysuje odpowiedni łuk, kąty mierzone sa w radianach, radian = (Math.PI/180)*stopnie Przykłady: var canvas = document.getelementbyid('canvas'); if (canvas.getcontext){ canvas.getcontext('2d'); ctx.moveto(75,50); ctx.lineto(100,75); ctx.lineto(100,25); ctx.fill(); var canvas = document.getelementbyid('canvas'); if (canvas.getcontext){ canvas.getcontext('2d'); ctx.arc(75,75,50,0,math.pi*2,true); // Outer circle ctx.moveto(110,75); ctx.arc(75,75,35,0,math.pi,false); // Mouth (clockwise) ctx.moveto(65,65); ctx.arc(60,65,5,0,math.pi*2,true); // Left eye ctx.moveto(95,65); ctx.arc(90,65,5,0,math.pi*2,true); // Right eye

var canvas = document.getelementbyid('canvas'); if (canvas.getcontext){ canvas.getcontext('2d'); // Filled triangle ctx.moveto(25,25); ctx.lineto(105,25); ctx.lineto(25,105); ctx.fill(); // Stroked triangle ctx.moveto(125,125); ctx.lineto(125,45); ctx.lineto(45,125); ctx.closepath(); Krzywe: quadraticcurveto(cp1x, cp1y, x, y) - rysuje krzywą między x, y, z punktem kontrolnym cpl1x, cpl1y beziercurveto(cp1x, cp1y, cp2x, cp2y, x, y) - podobnie jak powyżej, ale 2 punkty kontrolne Przykłady: var canvas = document.getelementbyid('canvas'); if (canvas.getcontext) { canvas.getcontext('2d'); // Quadratric curves example ctx.moveto(75,25); ctx.quadraticcurveto(25,25,25,62.5); ctx.quadraticcurveto(25,100,50,100); ctx.quadraticcurveto(50,120,30,125); ctx.quadraticcurveto(60,120,65,100); ctx.quadraticcurveto(125,100,125,62.5);

ctx.quadraticcurveto(125,25,75,25); Przykłady: var canvas = document.getelementbyid('canvas'); if (canvas.getcontext){ canvas.getcontext('2d'); // Quadratric curves example ctx.moveto(75,40); ctx.beziercurveto(75,37,70,25,50,25); ctx.beziercurveto(20,25,20,62.5,20,62.5); ctx.beziercurveto(20,80,40,102,75,120); ctx.beziercurveto(110,102,130,80,130,62.5); ctx.beziercurveto(130,62.5,130,25,100,25); ctx.beziercurveto(85,25,75,37,75,40); ctx.fill(); Obrazy: Obrazy możemy brać, z : HTMLImageElement - wykorzystując konstruktor Image() oraz dowolny <img> HTMLVideoElement - dowolna klatka z filmu wstawionego za pomocą <video> HTMLCanvasElement - grafika z innego <canvas> ImageBitmap - z bitmapy Wgrywając obraz musimy mieć pewność, że próbujemy go wyświetlić kiedy się już wgrał, w innym przypadku nie otrzymamy nic, albo wyjątek. var img = new Image(); // Create new img element img.addeventlistener("load", function() { // execute drawimage statements here, false); img.src = 'myimage.png'; // Set source path Przykład:

var img = new Image(); img.onload = function(){ ctx.drawimage(img,0,0); ctx.moveto(30,96); ctx.lineto(70,66); ctx.lineto(103,76); ctx.lineto(170,15); ; img.src = 'https://mdn.mozillademos.org/files/5395/backdrop.png'; Style Tworząc obiekty, możemy nadwać im style określające sposób wypełnienia oraz krawędzi: fillstyle = color - styl wypełnienia strokestyle = color - styl linii Kolory możemy podać w kilku postaciach: ctx.fillstyle = "orange"; ctx.fillstyle = "#FFA500"; ctx.fillstyle = "rgb(255,165,0)"; ctx.fillstyle = "rgba(255,165,0,1)"; strokestyle globalalpha - ustawia przeźroczystość dla wszystkich obiektów linestyle: linewidth - grubość linii linecap - zakończenie linii, możliwe wartości to butt(domyślny), round, square. linejoin - połączenie dwóch segmentów (linii, łuków, krzywych), możliwe opcje to round, bevel, miter. miterlimit Przykłady: for (var i=0;i<6;i++){

for (var j=0;j<6;j++){ ctx.fillstyle = 'rgb(' + Math.floor(255-42.5*i) + ',' + Math.floor(255-42.5*j) + ',0)'; ctx.fillrect(j*25,i*25,25,25);

for (var i=0;i<6;i++){ for (var j=0;j<6;j++){ ctx.strokestyle = 'rgb(0,' + Math.floor(255-42.5*i) + ',' + Math.floor(255-42.5*j) + ')'; ctx.arc(12.5+j*25,12.5+i*25,10,0,math.pi*2,true); var linecap = ['butt','round','square']; // Draw guides ctx.strokestyle = '#09f'; ctx.moveto(10,10); ctx.lineto(140,10); ctx.moveto(10,140); ctx.lineto(140,140); // Draw lines ctx.strokestyle = 'black'; for (var i=0;i<linecap.length;i++){ ctx.linewidth = 15; ctx.linecap = linecap[i]; ctx.moveto(25+i*50,10); ctx.lineto(25+i*50,140);

var linejoin = ['round','bevel','miter']; ctx.linewidth = 10; for (var i=0;i<linejoin.length;i++){ ctx.linejoin = linejoin[i]; ctx.moveto(-5,5+i*40); ctx.lineto(35,45+i*40); ctx.lineto(75,5+i*40); ctx.lineto(115,45+i*40); ctx.lineto(155,5+i*40); miterlimit - jak daleko mają być 'przesuwane' końce kształtów aż się spotkają. // Clear canvas ctx.clearrect(0,0,150,150); // Draw guides ctx.strokestyle = '#09f'; ctx.linewidth = 2; ctx.strokerect(-5,50,160,50); // Set line styles ctx.strokestyle = '#000'; ctx.linewidth = 10; // check input if (document.getelementbyid('miterlimit').value.match(/\d+ (\.\d+)?/)) { ctx.miterlimit = parsefloat(document.getelementbyid('miterlimit').value); else { alert('value must be a positive number'); // Draw lines

ctx.moveto(0,100); for (i=0;i<24;i++){ var dy = i%2==0? 25 : -25 ; ctx.lineto(math.pow(i,1.5)*2,75+dy); return false;

Gradienty: W gradiencie liniowym, najpierw określamy rozmiar gradientu (punkty x1, y1, x2, y2) a następnie za pomocą ColorStopów wartości kolorów w poszczególnych miejscach: // Create gradients var lingrad = ctx.createlineargradient(0,0,0,150); lingrad.addcolorstop(0, '#00ABEB'); lingrad.addcolorstop(0.5, '#fff'); lingrad.addcolorstop(0.5, '#26C000'); lingrad.addcolorstop(1, '#fff'); var lingrad2 = ctx.createlineargradient(0,50,0,95); lingrad2.addcolorstop(0.5, '#000'); lingrad2.addcolorstop(1, 'rgba(0,0,0,0)'); // assign gradients to fill and stroke styles ctx.fillstyle = lingrad; ctx.strokestyle = lingrad2; // draw shapes ctx.fillrect(10,10,130,130); ctx.strokerect(50,50,50,50); W gradiencie radialnym, parametry reprezentują dwa koła - o środku w punkcie x1,y1 i promieniu r1, oraz drugim odpowiednio w miejscu x2, y2 i promieniu r2: createradialgradient(x1, y1, r1, x2, y2, r2). // Create gradients var radgrad = ctx.createradialgradient(45,45,10,52,50,30); radgrad.addcolorstop(0, '#A7D30C'); radgrad.addcolorstop(0.9, '#019F62');

radgrad.addcolorstop(1, 'rgba(1,159,98,0)'); var radgrad2 = ctx.createradialgradient(105,105,20,112,120,50); radgrad2.addcolorstop(0, '#FF5F98'); radgrad2.addcolorstop(0.75, '#FF0188'); radgrad2.addcolorstop(1, 'rgba(255,1,136,0)'); var radgrad3 = ctx.createradialgradient(95,15,15,102,20,40); radgrad3.addcolorstop(0, '#00C9FF'); radgrad3.addcolorstop(0.8, '#00B5E2'); radgrad3.addcolorstop(1, 'rgba(0,201,255,0)'); var radgrad4 = ctx.createradialgradient(0,150,50,0,140,90); radgrad4.addcolorstop(0, '#F4F201'); radgrad4.addcolorstop(0.8, '#E4C700'); radgrad4.addcolorstop(1, 'rgba(228,199,0,0)'); // draw shapes ctx.fillstyle = radgrad4; ctx.fillrect(0,0,150,150); ctx.fillstyle = radgrad3; ctx.fillrect(0,0,150,150); ctx.fillstyle = radgrad2; ctx.fillrect(0,0,150,150); ctx.fillstyle = radgrad; ctx.fillrect(0,0,150,150); Transformacje: Zmiany w stanie canvas zapisywane są na stosie. Aby dodać do stosu aktualny stan wywołujemy na kontekście polecenie save(), aby powrócić do zapisanego stanu, używamy restore(). Przykład: ctx.fillrect(0,0,150,150); default settings ctx.save(); // Draw a rectangle with // Save the default state

ctx.fillstyle = '#09F' // Make changes to the settings ctx.fillrect(15,15,120,120); // Draw a rectangle with new settings ctx.save(); ctx.fillstyle = '#FFF' settings ctx.globalalpha = 0.5; ctx.fillrect(30,30,90,90); new settings ctx.fillrect(45,45,60,60); restored settings ctx.fillrect(60,60,30,30); restored settings // Save the current state // Make changes to the // Draw a rectangle with // Restore previous state // Draw a rectangle with // Restore original state // Draw a rectangle with Przesunięcie: translate(x,y) - przesuwa układ współrzędnych o x, y. ctx.fillrect(0,0,300,300); for (var i=0;i<3;i++) { for (var j=0;j<3;j++) { ctx.save(); ctx.strokestyle = "#9CFF00"; ctx.translate(50+j*100,50+i*100); drawspirograph(ctx,20*(j+2)/(j+1),-8*(i+3)/ (i+1),10); function drawspirograph(ctx,r,r,o){ var x1 = R-O; var y1 = 0;

var i = 1; ctx.moveto(x1,y1); do { if (i>20000) break; var x2 = (R+r)*Math.cos(i*Math.PI/72) - (r+o)*math.cos(((r+r)/r)*(i*math.pi/72)) var y2 = (R+r)*Math.sin(i*Math.PI/72) - (r+o)*math.sin(((r+r)/r)*(i*math.pi/72)) ctx.lineto(x2,y2); x1 = x2; y1 = y2; i++; while (x2!= R-O && y2!= 0 );

Obrót: rotate(kąt) - obraca układ współrzędnych o kąt (w radianach). ctx.translate(75,75); for (var i=1;i<6;i++){ // Loop through rings (from inside to out) ctx.save(); ctx.fillstyle = 'rgb('+(51*i)+','+(255-51*i)+',255)'; for (var j=0;j<i*6;j++){ // draw individual dots ctx.rotate(math.pi*2/(i*6)); ctx.arc(0,i*12.5,5,0,math.pi*2,true); ctx.fill(); Skalowanie: scale(x, y) - skaluje obraz o x, y. ctx.strokestyle = "#fc0"; ctx.linewidth = 1.5; ctx.fillrect(0,0,300,300); // Uniform scaling ctx.save() ctx.translate(50,50); drawspirograph(ctx,22,6,5); ctx.translate(100,0); ctx.scale(0.75,0.75); drawspirograph(ctx,22,6,5); ctx.translate(133.333,0);

ctx.scale(0.75,0.75); drawspirograph(ctx,22,6,5); // Non uniform scaling (y direction) ctx.strokestyle = "#0cf"; ctx.save() ctx.translate(50,150); ctx.scale(1,0.75); drawspirograph(ctx,22,6,5); ctx.translate(100,0); ctx.scale(1,0.75); drawspirograph(ctx,22,6,5); ctx.translate(100,0); ctx.scale(1,0.75); drawspirograph(ctx,22,6,5); // Non uniform scaling (x direction) ctx.strokestyle = "#cf0"; ctx.save() ctx.translate(50,250); ctx.scale(0.75,1); drawspirograph(ctx,22,6,5); ctx.translate(133.333,0); ctx.scale(0.75,1); drawspirograph(ctx,22,6,5); ctx.translate(177.777,0); ctx.scale(0.75,1); drawspirograph(ctx,22,6,5); function drawspirograph(ctx,r,r,o){ var x1 = R-O; var y1 = 0; var i = 1; ctx.moveto(x1,y1); do {

if (i>20000) break; var x2 = (R+r)*Math.cos(i*Math.PI/72) - (r+o)*math.cos(((r+r)/r)*(i*math.pi/72)) var y2 = (R+r)*Math.sin(i*Math.PI/72) - (r+o)*math.sin(((r+r)/r)*(i*math.pi/72)) ctx.lineto(x2,y2); x1 = x2; y1 = y2; i++; while (x2!= R-O && y2!= 0 ); Kompozycja Domyślnie scena rysowana jest za pomocą source-over, oznacza to, że nowe kształty rysowane są na starych. Za pomocą globalcompositeoperation = typ możemy ustalić nowe zachowanie sceny: source-over (domyślne) - nowe rysowane na starym source-in - rysowana jest część wspólna nowego i starego source-out - rysujemy elementy nie mające wspólnych punktów source-atop - nowy kształt rysowany jest tam, gdzie oba kształty się przecinają lighter - jeżeli dwa kształty się przecinają to ich część wspólna jest sumą ich kolorów destination-over - nowe kształty rysowane są poniżej starych destination-in - istniejące kształty są zachowane tylko w miejscach przecięcia z nowym destination-out - istniejące kształty są zachowane tylko tam, gdzie się nie przecinają z nowym destination-atop - istniejący kształt jest rysowany tam, gdzie przecinaja się z nowym. Nowy kształt rysowany jest pod spodem. darker - tam gdzie przecinają się kształty, mają one kolor równy różnicy ich wartości. (Nie używana już) xor - kształty są rysowane jako przeźroczyste tam gdzie się przecinają, rysowane są normalnie w pozostałych miejscach. copy - rysuje tylko nowy kształt i usuwa stary. Ścieżki ucinające: Pozwalają ustawić maskę dla canvasu. Obiekty rysowane po clip() są ucięte do kształtu maski:

ctx.fillrect(0,0,150,150); ctx.translate(75,75); // Create a circular clipping path ctx.arc(0,0,60,0,math.pi*2,true); ctx.clip(); // draw background var lingrad = ctx.createlineargradient(0,-75,0,75); lingrad.addcolorstop(0, '#232256'); lingrad.addcolorstop(1, '#143778'); ctx.fillstyle = lingrad; ctx.fillrect(-75,-75,150,150); // draw stars for (var j=1;j<50;j++){ ctx.save(); ctx.fillstyle = '#fff'; ctx.translate(75-math.floor(math.random()*150), 75-Math.floor(Math.random()*150)); drawstar(ctx,math.floor(math.random()*4)+2); function drawstar(ctx,r){ ctx.save(); ctx.beginpath() ctx.moveto(r,0); for (var i=0;i<9;i++){ ctx.rotate(math.pi/5); if(i%2 == 0) { ctx.lineto((r/0.525731)*0.200811,0); else { ctx.lineto(r,0); ctx.closepath(); ctx.fill();

Podstawowa animacja: Aby móc stworzyć animowaną scenę, należy zastosować się do kilku kroków: Najpierw czyścimy canvas. Zapisujemy stan kanwy jeśli to potrzebne. Rysujemy scenę Przywracamy stan kanwy. setinterval(function, delay) - uruchamia funkcję function (podawaną jako string) co delay milisekund. var sun = new Image(); var moon = new Image(); var earth = new Image(); function init(){ sun.src = 'https://mdn.mozillademos.org/files/1456/canvas_sun.png'; moon.src = 'https://mdn.mozillademos.org/files/1443/canvas_moon.png' ; earth.src = 'https://mdn.mozillademos.org/files/1429/canvas_earth.png '; setinterval(draw,100); ctx.globalcompositeoperation = 'destination-over'; ctx.clearrect(0,0,300,300); // clear canvas ctx.fillstyle = 'rgba(0,0,0,0.4)'; ctx.strokestyle = 'rgba(0,153,255,0.4)'; ctx.save(); ctx.translate(150,150); // Earth var time = new Date(); ctx.rotate( ((2*Math.PI)/60)*time.getSeconds() +

((2*Math.PI)/60000)*time.getMilliseconds() ); ctx.translate(105,0); ctx.fillrect(0,-12,50,24); // Shadow ctx.drawimage(earth,-12,-12); // Moon ctx.save(); ctx.rotate( ((2*Math.PI)/6)*time.getSeconds() + ((2*Math.PI)/6000)*time.getMilliseconds() ); ctx.translate(0,28.5); ctx.drawimage(moon,-3.5,-3.5); ctx.arc(150,150,105,0,math.pi*2,false); // Earth orbit ctx.drawimage(sun,0,0,300,300);