Text zeichnen
Nachdem wir im vorherigen Kapitel gesehen haben, wie man Stile und Farben anwendet, werden wir nun betrachten, wie man Text auf die Leinwand zeichnet.
Text zeichnen
Der Canvas-Rendering-Kontext bietet zwei Methoden, um Text zu rendern:
fillText(text, x, y [, maxWidth])
-
Füllt einen gegebenen Text an der angegebenen (x,y)-Position. Optional mit einer maximalen Breite zum Zeichnen.
strokeText(text, x, y [, maxWidth])
-
Zeichnet den Umriss eines gegebenen Textes an der angegebenen (x,y)-Position. Optional mit einer maximalen Breite zum Zeichnen.
Ein fillText
Beispiel
Der Text wird mit dem aktuellen fillStyle
gefüllt.
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.font = "48px serif";
ctx.fillText("Hello world", 10, 50);
}
Ein strokeText
Beispiel
Der Text wird mit dem aktuellen strokeStyle
umrandet.
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.font = "48px serif";
ctx.strokeText("Hello world", 10, 50);
}
Textgestaltung
In den obigen Beispielen verwenden wir bereits die font
-Eigenschaft, um den Text etwas größer als die Standardgröße zu machen. Es gibt einige weitere Eigenschaften, die Ihnen ermöglichen, die Art und Weise anzupassen, wie der Text auf der Leinwand angezeigt wird:
font = value
-
Der aktuelle Textstil, der beim Zeichnen von Text verwendet wird. Dieser String verwendet die gleiche Syntax wie die CSS
font
-Eigenschaft. Die Standard-Schriftart ist 10px sans-serif. textAlign = value
-
Einstellung der Textausrichtung. Mögliche Werte:
start
,end
,left
,right
odercenter
. Der Standardwert iststart
. textBaseline = value
-
Einstellung der Grundlinienausrichtung. Mögliche Werte:
top
,hanging
,middle
,alphabetic
,ideographic
,bottom
. Der Standardwert istalphabetic
. direction = value
-
Richtungsangabe. Mögliche Werte:
ltr
,rtl
,inherit
. Der Standardwert istinherit
.
Diese Eigenschaften könnten Ihnen vertraut sein, wenn Sie zuvor mit CSS gearbeitet haben.
Das folgende Diagramm von der WHATWG zeigt die verschiedenen Grundlinien, die von der textBaseline
-Eigenschaft unterstützt werden.
Ein textBaseline
Beispiel
Bearbeiten Sie den untenstehenden Code und sehen Sie, wie sich Ihre Änderungen live auf der Leinwand aktualisieren:
Erweiterte Textmessungen
Falls Sie mehr Details über den Text benötigen, ermöglicht Ihnen die folgende Methode, ihn zu messen.
measureText()
-
Gibt ein
TextMetrics
-Objekt zurück, das die Breite in Pixeln enthält, die der angegebene Text haben wird, wenn er im aktuellen Textstil gezeichnet wird.
Der folgende Codeausschnitt zeigt, wie Sie einen Text messen und seine Breite ermitteln können.
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
const text = ctx.measureText("foo"); // TextMetrics object
text.width; // 16;
}
Barrierefreiheit
Das <canvas>
-Element ist lediglich ein Bitmap und liefert keine Informationen über gezeichnete Objekte. Text, der auf einer Leinwand geschrieben wird, kann Lesbarkeitsprobleme bei Nutzern verursachen, die auf Bildschirmvergrößerung angewiesen sind. Die Pixel innerhalb eines Canvas-Elements skalieren nicht und können bei Vergrößerung unscharf werden. Dies liegt daran, dass sie keine Vektoren sind, sondern eine buchstabenförmige Ansammlung von Pixeln. Bei der Vergrößerung werden die Pixel größer.
Canvas-Inhalte werden nicht wie semantisches HTML an Barrierefreiheitswerkzeuge weitergegeben. Im Allgemeinen sollten Sie die Verwendung von Canvas in einer zugänglichen Website oder App vermeiden. Eine Alternative wäre, HTML-Elemente oder SVG anstelle von Canvas zu verwenden.