Signatur
Beschreibung
SVGFETileElement ist die DOM-Schnittstelle zum Element <feTile>. Dieses Filterprimitiv nimmt ein Eingabebild (angegeben über das Attribut in) und wiederholt es horizontal und vertikal wie Kacheln, bis sein eigener Teilbereich (x, y, width, height) vollständig gefüllt ist. Wie groß eine einzelne Kachel ist, legt der Teilbereich des Eingabe-Primitivs fest, also nicht die Größe der Grafik selbst.
Das Interface erbt von SVGElement und bringt die Standard-Attribute für Filterprimitive mit (SVGFilterPrimitiveStandardAttributes): x, y, width, height (jeweils SVGAnimatedLength) und result (SVGAnimatedString). Die einzige eigene Eigenschaft ist in1, ein SVGAnimatedString, der das Attribut in widerspiegelt.
In der Praxis setzt man <feTile> ein, um aus einem kleinen Ausschnitt (z. B. einem <feFlood>, <feImage> oder <feOffset> mit begrenztem Teilbereich) ein flächiges Muster zu erzeugen, etwa Karo-, Streifen- oder Texturhintergründe, ohne ein <pattern> zu verwenden. Per JavaScript erzeugst du das Element mit document.createElementNS() im SVG-Namensraum und kannst anschließend Eingabe und Teilbereich dynamisch anpassen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $in1 | SVGAnimatedString | Ergebnis des vorherigen Primitivs bzw. SourceGraphic | Nur lesbar. Spiegelt das Attribut in wider. Über in1.baseVal liest oder setzt du die Eingabe, z. B. "SourceGraphic" oder den result-Namen eines anderen Primitivs. |
| $x / y | SVGAnimatedLength | 0% | Nur lesbar. Position des Filterprimitiv-Teilbereichs (Attribute x, y). |
| $width / height | SVGAnimatedLength | 100% | Nur lesbar. Größe des Teilbereichs, der mit Kacheln gefüllt wird. |
| $result | SVGAnimatedString | Nur lesbar. Name des Ergebnisses, auf das nachfolgende Primitive per in verweisen können. |
Rückgabewert
document.createElementNS("http://www.w3.org/2000/svg", "feTile") oder durch Parsen von SVG-Markup. Ein direkter Konstruktoraufruf ist nicht möglich.Beispiele
Kachelmuster-Filter per JavaScript erzeugen
const SVG_NS = "http://www.w3.org/2000/svg";
const svg = document.querySelector("svg");
const filter = document.createElementNS(SVG_NS, "filter");
filter.id = "kacheln";
filter.setAttribute("filterUnits", "userSpaceOnUse");
filter.setAttribute("x", "0");
filter.setAttribute("y", "0");
filter.setAttribute("width", "200");
filter.setAttribute("height", "200");
// Kleine Kachel: 20×20 Pixel Farbfläche
const flood = document.createElementNS(SVG_NS, "feFlood");
flood.setAttribute("flood-color", "tomato");
flood.setAttribute("x", "0");
flood.setAttribute("y", "0");
flood.setAttribute("width", "15");
flood.setAttribute("height", "15");
flood.setAttribute("result", "kachel");
// Diese Kachel über den gesamten Filterbereich wiederholen
const tile = document.createElementNS(SVG_NS, "feTile");
tile.setAttribute("in", "kachel");
filter.append(flood, tile);
svg.querySelector("defs").append(filter);
svg.querySelector("rect").setAttribute("filter", "url(#kacheln)");
console.log(tile instanceof SVGFETileElement);
Eingabe und Teilbereich auslesen und ändern
const tile = document.querySelector("feTile");
console.log(tile.in1.baseVal); // aktuelle Eingabe
console.log(tile.width.baseVal.valueAsString);
// Eingabe dynamisch umschalten
tile.in1.baseVal = "SourceGraphic";
console.log(tile.getAttribute("in"));
Alle feTile-Primitive eines Dokuments prüfen
const tiles = [...document.querySelectorAll("feTile")];
const ohneEingabe = tiles.filter((t) => !t.in1.baseVal);
console.log(`${tiles.length} feTile-Elemente, ${ohneEingabe.length} ohne explizites in-Attribut`);
// Wichtig · Fallstricke
- Kachelgröße: Die Größe einer Kachel ergibt sich aus dem Teilbereich des Eingabe-Primitivs. Ohne begrenzte
x/y/width/heightam Eingabe-Primitiv ist die Kachel so groß wie der ganze Filterbereich, und es ist keine Wiederholung zu sehen. - Namensraum: Mit
document.createElement(\"feTile\")erzeugst du nur ein unbekanntes HTML-Element. Verwende immercreateElementNS()mithttp://www.w3.org/2000/svg. - Die Eigenschaft heißt
in1und nichtin, weilinin JavaScript ein reserviertes Wort ist. Schreibzugriffe laufen überin1.baseVal.in1selbst ist nur lesbar. - Wählst du
filterUnitsbzw.primitiveUnitsnicht passend (Standard:objectBoundingBox), werden Prozent- und Bruchwerte relativ zur Objektgröße interpretiert. Das führt schnell zu unerwarteten Kachelgrößen. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Aufwendige Filter mit großen Bereichen können beim Zeichnen Leistung kosten, besonders wenn sie animiert werden.