Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Text zeichnen

Nachdem Sie im vorherigen Kapitel gelernt haben, wie man Stile und Farben anwendet, werden wir uns nun ansehen, 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 die Konturen 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("my-canvas").getContext("2d");
  ctx.font = "48px serif";
  ctx.fillText("Hello world", 10, 50);
}

Ein strokeText-Beispiel

Der Text wird mit dem aktuellen strokeStyle gefüllt.

js
function draw() {
  const ctx = document.getElementById("my-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 noch weitere Eigenschaften, die es Ihnen ermöglichen, die Anzeigeweise des Textes auf der Leinwand anzupassen:

font = value

Der aktuelle Textstil, der beim Zeichnen von Text verwendet wird. Diese Zeichenfolge verwendet die gleiche Syntax wie die CSS font-Eigenschaft. Die Standardschriftart ist 10px sans-serif.

textAlign = value

Textausrichtungseinstellung. Mögliche Werte: start, end, left, right oder center. Der Standardwert ist start.

textBaseline = value

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

direction = value

Direktionalität. Mögliche Werte: ltr, rtl, inherit. Der Standardwert ist inherit.

Diese Eigenschaften könnten Ihnen bekannt vorkommen, wenn Sie zuvor mit CSS gearbeitet haben.

Das folgende Diagramm aus den HTML-Spezifikationen zeigt die verschiedenen Baselines, die von der textBaseline-Eigenschaft unterstützt werden.

Der em-over-Basispunkt liegt ungefähr am oberen Rand der Glyphen in einer Schriftart, der hängende Basispunkt ist dort, wo einige Glyphen wie आ verankert sind, die Mitte ist auf halbem Wege zwischen den em-over- und em-under-Basispunkten, der alphabetische Basispunkt ist dort, wo Charaktere wie Á, ÿ, f und Ω verankert sind, der ideographische untere Basispunkt ist dort, wo Glyphen wie 私 und 達 verankert sind, und der em-under-Basispunkt liegt ungefähr am unteren Rand der Glyphen in einer Schriftart. Die obere und untere Grenze der Begrenzungsbox können weit von diesen Basispunkten entfernt sein, da Glyphen weit außerhalb der em-over- und em-under-Basispunkte reichen können.

Ein textBaseline-Beispiel

Dieses Beispiel zeigt die verschiedenen Werte der textBaseline-Eigenschaft. Weitere Informationen und ausführliche Beispiele finden Sie auf der Seite CanvasRenderingContext2D.textBaseline.

js
function draw() {
  const ctx = document.getElementById("my-canvas").getContext("2d");
  ctx.font = "48px serif";

  ctx.textBaseline = "hanging";
  ctx.strokeText("hanging", 10, 50);

  ctx.textBaseline = "middle";
  ctx.strokeText("middle", 250, 50);

  ctx.beginPath();
  ctx.moveTo(10, 50);
  ctx.lineTo(300, 50);
  ctx.stroke();
}

Erweiterte Textmessung

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 Pixel angibt, die der angegebene Text hat, wenn er im aktuellen Textstil gezeichnet wird.

Das folgende Code-Snippet zeigt, wie Sie einen Text messen und seine Breite erhalten können.

js
function draw() {
  const ctx = document.getElementById("my-canvas").getContext("2d");
  const text = ctx.measureText("foo"); // TextMetrics object
  text.width; // 16;
}