Szukaj…
Składnia
- .prototype.createdCallback ()
- .prototype.attachedCallback ()
- .prototype.detachedCallback ()
- .prototype.attributeChangedCallback (name, oldValue, newValue)
- document.registerElement (nazwa, [opcje])
Parametry
Parametr | Detale |
---|---|
Nazwa | Nazwa nowego niestandardowego elementu. |
options.extends | Nazwa rodzimego elementu, który ma być rozszerzony, jeśli taki istnieje. |
options.prototype | Niestandardowy prototyp do użycia dla elementu niestandardowego, jeśli taki istnieje. |
Uwagi
Pamiętaj, że specyfikacja elementów niestandardowych nie została jeszcze ustandaryzowana i może ulec zmianie. Dokumentacja opisuje wersję, która została obecnie dostarczona w stabilnej wersji Chrome.
Elementy niestandardowe to funkcja HTML5 umożliwiająca programistom używanie JavaScript do definiowania niestandardowych tagów HTML, które mogą być używane na ich stronach, wraz z powiązanymi stylami i zachowaniami. Są często używane z shadow-dom .
Rejestracja nowych elementów
Definiuje <initially-hidden>
niestandardowo <initially-hidden>
element niestandardowy, który ukrywa jego zawartość, dopóki nie upłynie określona liczba sekund.
const InitiallyHiddenElement = document.registerElement('initially-hidden', class extends HTMLElement {
createdCallback() {
this.revealTimeoutId = null;
}
attachedCallback() {
const seconds = Number(this.getAttribute('for'));
this.style.display = 'none';
this.revealTimeoutId = setTimeout(() => {
this.style.display = 'block';
}, seconds * 1000);
}
detachedCallback() {
if (this.revealTimeoutId) {
clearTimeout(this.revealTimeoutId);
this.revealTimeoutId = null;
}
}
});
<initially-hidden for="2">Hello</initially-hidden>
<initially-hidden for="5">World</initially-hidden>
Rozszerzanie elementów natywnych
Możliwe jest rozszerzanie elementów natywnych, ale ich potomkowie nie mają własnych nazw znaczników. Zamiast tego, is
atrybut jest używany do określenia, które podklasy element ma zastosowania. Na przykład, oto rozszerzenie elementu <img>
, który rejestruje komunikat w konsoli po załadowaniu.
const prototype = Object.create(HTMLImageElement.prototype);
prototype.createdCallback = function() {
this.addEventListener('load', event => {
console.log("Image loaded successfully.");
});
};
document.registerElement('ex-image', { extends: 'img', prototype: prototype });
<img is="ex-image" src="http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png" />