Einführung Canvas
Mit der Einführung von HTML5 im Jahr 2014 hielt auch das HTML5-Element <CANVAS> Einzug. Die
Verwendung von Canvas ist also eine noch relativ junge Technologie. Canvas ermöglichen es dem
Web-Entwickler direkt innerhalb des Browsers mit nativen Befehlen zu zeichnen. Canvas benötigen
keine zusätzlichen Plugins (wie z.B. Adobe Flash o.ä.), sondern können direkt on-the-fly im Browser
des Users gezeichnet werden.
Um mit einem Canvas-Objekt arbeiten zu können, benötigen wir zunächst ein im HTML5-Kontext
definiertes Canvas-Element. Das Canvas-Element verhält sich ähnlich wie ein <img>-Element,
jedoch enthält es keine src-Eigenschaft. Und zusätzlich benötigt es zwingend einen
geschlossenen End-Tag. Die Attribute width und height sind
optional. Werden sie nicht definiert, hat das Canvas eine Default-Größe von 300x300 Pixel. Ein
ID-Attribut ist nötig, damit wir das Canvas später ansprechen können.
<canvas id="canvasOne" width="300" height="150"></canvas>
Das Canvas-Element kann via CSS wie jedes <img>-Element über Margin, Border, etc. gestyled
werden. Es empfiehlt sich für nicht kompatible Browser ein Fallback-Image zu hinterlegen. Dieses
Image wird einfach zwischen den beiden Canvas-Tags abgelegt.
In einem Canvas wird über JavaScript-Funktionen gezeichnet. Dazu benötige wird den Canvas-Kontext.
Diesen holen wir uns mit folgendem Code:
var canvas = document.getElementById('canvasOne');
var ctx = canvas.getContext('2d');
Rechtecke zeichnen
Eine gute Möglichkeit mit dem Canvas zeichnen zu beginnen ist es, Rechtecke zu zeichnen.
Rechtecke werden mit den Parametern x,y Koordinaten angegeben und den Seitenlängen. Also
insgesamt vier Parameter. Zudem muss eine Füllfarbe festgelegt werden. Diese ist standardmäßig
schwarz. Das Rechteck ist die einzige primitive Form, die Canvas unterstützen. Alles andere muss aus
"Paths" und den Rechtecken zusammengebaut werden.
Gezeichnet wird weiterhin auf dem 2d-Kontext,
welchen wir vorher vom Canvas-Element
erzeugt haben. Dies resultiert in folgendem Code, wobei color ein Hex-Code ist, alternativ
aber auch per
RGN-String("rgb(200,0,0)";) angegeben werden kann. Zusätzlich ist auch die Angabe eines
Alpha-Kanals möglich. X,Y entsprechen den Koordinaten im Canvas,
wo der Startpunkt des Rechtecks gesetzt wird.
ctx.fillStyle = color;
ctx.fillRect (x, y, 55, 50);
Im folgenden Canvas ist eine Demo untergebracht. Ein Klick darauf zeichnet ein Rechteck mit
zufälliger Farbe an die Position des Mauszeigers.
Bitte in das Canvas klicken
Ein Rechtsklick auf das Canvas verdeutlicht, dass das Canvas-Element ein Image ist. Es kann als
Bilddatei abgespeichert werden.
"Paths" zeichnen
Ein Path (Pfad) ist die zweite primitive Form, die ein Canvas anbietet. Mit den Pfaden können
innerhalb eines Canvas Linien gezeichnet werden. Dieses Zeichnen besteht aus einer Kette von
Befehlen. Diese Beginnt initial mit der Aufforderung die Pfadzeichnung zu beginnen. Danach wird der
Zeichenpunkt auf einen Startpunkt mit X und Y Koordinaten innerhalb des Canvas verschoben. Darauf
wird das Ziel mit lineTo festgelegt. Auch hierbei werden wieder Koordinaten in X und Y Form
verwendet. Der Befehl lineTo kann beliebig oft hintereinander verwendet werden. Damit kann
dann nicht nur eine Linie, sondern als Kombination ein kompletter Pfad beschrieben werden. Wenn die
Beschreibung vollständig ist, wird der Pfad mit stroke geplottet.
ctx.beginPath();
ctx.moveTo(StartX,StartY);
ctx.lineTo(TargetX,TargetY);
ctx.stroke();
Im folgenden Canvas ist eine Demo untergebracht. Ein Klick darauf zeichnet einen Pfad mit
zufälliger Farbe an die Position des Mauszeigers von der Position des letzten Pfades.
Bitte in das Canvas klicken
Der Pfad kann weiter mit verschiedenen Attributen beschrieben werden. Diese können nach jeder lineTo
erneut verändert werden und wirken sich dann auf die nachfolgende Beschreibung aus.
Der strokeStyle
beschreibt die Farbe des Pfades. Dieses kann ein Hex-Code oder eine RGB-Code sein.
Die lineWidth nimmt einen Integer-Wert entgegen und beschreibt die Dicke der gezeichneten
Linie.
Das lineCap beschreibt, wie das Ende eine Linie dargestellt wird. Es sind die Stringwerte
"butt","round","square" gültig, wobei "round" zum Beispiel für abgerundet steht.
//In der Demo verwendetes Setting
ctx.strokeStyle = color; //wobei color ein zufälliger Farbcode ist
ctx.lineWidth = 3; //int
ctx.lineCap = "round"; //butt, round, square
Weiter zu Advanced