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

View in English Always switch to English

CanvasRenderingContext2D: clip()-Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

Die CanvasRenderingContext2D.clip()-Methode der Canvas 2D API verwandelt den aktuellen oder angegebenen Pfad in die aktuelle Schnittregion. Die vorherige Schnittregion, falls vorhanden, wird mit dem aktuellen oder angegebenen Pfad geschnitten, um die neue Schnittregion zu erstellen.

Im Bild unten stellt die rote Umrandung eine Schnittregion dar, die wie ein Stern geformt ist. Nur die Teile des Schachbrettmusters, die sich innerhalb der Schnittregion befinden, werden gezeichnet.

Sternförmige Schnittregion

Hinweis: Beachten Sie, dass die Schnittregion nur aus Formen konstruiert wird, die dem Pfad hinzugefügt wurden. Es funktioniert nicht mit Formprimativen, die direkt auf die Leinwand gezeichnet werden, wie z.B. fillRect(). Stattdessen müssten Sie rect() verwenden, um eine rechteckige Form zum Pfad hinzuzufügen, bevor Sie clip() aufrufen.

Hinweis: Schnittpfade können nicht direkt rückgängig gemacht werden. Sie müssen Ihren Canvas-Zustand mit save() speichern, bevor Sie clip() aufrufen, und ihn wiederherstellen, nachdem Sie das Zeichnen im geschnittenen Bereich abgeschlossen haben, mit restore().

Syntax

js
clip()
clip(path)
clip(fillRule)
clip(path, fillRule)

Parameter

fillRule

Der Algorithmus, mit dem bestimmt wird, ob ein Punkt innerhalb oder außerhalb der Schnittregion liegt. Mögliche Werte:

nonzero

Die Non-Zero-Winding-Regel. Standardregel.

evenodd

Die Even-Odd-Winding-Regel.

path

Ein Path2D-Pfad, der als Schnittregion verwendet werden soll.

Rückgabewert

Keiner (undefined).

Beispiele

Eine einfache Schnittregion

Dieses Beispiel verwendet die clip()-Methode, um eine Schnittregion entsprechend der Form eines kreisförmigen Bogens zu erstellen. Zwei Rechtecke werden dann gezeichnet; nur die Teile innerhalb der Schnittregion werden gerendert.

HTML

html
<canvas id="canvas"></canvas>

JavaScript

Die Schnittregion ist ein voller Kreis mit seinem Zentrum bei (100, 75) und einem Radius von 50.

js
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

// Create circular clipping region
ctx.beginPath();
ctx.arc(100, 75, 50, 0, Math.PI * 2);
ctx.clip();

// Draw stuff that gets clipped
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "orange";
ctx.fillRect(0, 0, 100, 100);

Ergebnis

Festlegen eines Pfades und eines fillRule

Dieses Beispiel speichert zwei Rechtecke in einem Path2D-Objekt, das dann mit der clip()-Methode zur aktuellen Schnittregion gemacht wird. Die "evenodd"-Regel erzeugt ein Loch, wo sich die Schnittrechtecke überschneiden; standardmäßig (mit der "nonzero"-Regel) gäbe es kein Loch.

HTML

html
<canvas id="canvas"></canvas>

JavaScript

js
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

// Create clipping path
let region = new Path2D();
region.rect(80, 10, 20, 130);
region.rect(40, 50, 100, 50);
ctx.clip(region, "evenodd");

// Draw stuff that gets clipped
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, canvas.width, canvas.height);

Ergebnis

Erstellen einer komplexen Schnittregion

Dieses Beispiel verwendet zwei Pfade, ein Rechteck und ein Quadrat, um eine komplexe Schnittregion zu erstellen. Die clip()-Methode wird zweimal aufgerufen, zuerst um die aktuelle Schnittregion mit einem Path2D-Objekt auf den Kreis festzulegen, dann erneut, um die Kreis-Schnittregion mit einem Quadrat zu schneiden. Die endgültige Schnittregion ist eine Form, die die Schnittmenge des Kreises und des Quadrats darstellt.

HTML

html
<canvas id="canvas"></canvas>

JavaScript

js
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

// Create two clipping paths
let circlePath = new Path2D();
circlePath.arc(150, 75, 75, 0, 2 * Math.PI);
let squarePath = new Path2D();
squarePath.rect(85, 10, 130, 130);

// Set the clip to the circle
ctx.clip(circlePath);
// Set the clip to be the intersection of the circle and the square
ctx.clip(squarePath);

// Draw stuff that gets clipped
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, canvas.width, canvas.height);

Ergebnis

Spezifikationen

Specification
HTML
# dom-context-2d-clip-dev

Browser-Kompatibilität

Siehe auch