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.

js
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.

js
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 oder center. Der Standardwert ist start.

textBaseline = value

Einstellung der Grundlinienausrichtung. Mögliche Werte: top, hanging, middle, alphabetic, ideographic, bottom. Der Standardwert ist alphabetic.

direction = value

Richtungsangabe. Mögliche Werte: ltr, rtl, inherit. Der Standardwert ist inherit.

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. Die Oberseite des Em-Quadrats befindet sich ungefähr am oberen Ende der Glyphen einer Schriftart, die hängende Grundlinie ist dort, wo einige Glyphen wie आ verankert sind. Die Mitte befindet sich auf halber Strecke zwischen der Oberseite und Unterseite des Em-Quadrats. Die alphabetische Grundlinie ist dort, wo Zeichen wie Á, ÿ, f und Ω verankert sind. Die ideographische Grundlinie ist dort, wo Glyphen wie 私 und 達 verankert sind. Und die Unterseite des Em-Quadrats befindet sich ungefähr am unteren Ende der Glyphen in einer Schriftart. Die Ober- und Unterseite des Begrenzungsrahmens können weit von diesen Grundlinien entfernt sein, da Glyphen weit außerhalb des Em-Quadrats reichen können.

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.

js
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.