Ich versuche, ein Polyfill der Arten mit dem Custom Elements API für benutzerdefinierte Elemente zu erstellen, die von einer In-Game-Browser-Engine verwendet werden, um Schaltflächen und ähnliches anzuzeigen. Ich kann jedoch anscheinend nicht auf die Attribute des Elements (zB. Src, href ...) innerhalb des Konstruktors zugreifen. HierIch kann nicht auf Attribute eines benutzerdefinierten Elements von seinem Konstruktor zugreifen
ein Beispiel:
class KWButton extends HTMLElement {
constructor() {
super();
var attributes = this.attributes;
var shadow = this.attachShadow({
mode: 'open'
});
var img = document.createElement('img');
img.alt = this.getAttribute('text'); // the getAttribute call returns null
img.src = this.getAttribute('src'); // as does this one
img.width = this.getAttribute('width'); // and this
img.height = this.getAttribute('height'); // and this
img.className = 'vivacity-kwbutton'; // this works fine
shadow.appendChild(img);
img.addEventListener('click',() => {
window.location = this.getAttribute('href'); // this works perfectly fine
});
}
}
customElements.define('kw-button',
KWButton);
<kw-button src="https://placekitten.com/g/198/39" width="198" height="39" icon_src="https://placekitten.com/g/34/32" icon_width="34" icon_height="32" href="https://placekitten.com/" text="placekiten" color="#ffffff" size="18"></kw-button>
Dies scheint zu funktionieren gut, soweit ich sagen kann connectedCallback verschoben werden. Beachten Sie, dass es wahrscheinlich ratsam ist, die Arbeit für das Lifecycle-Ereignis "connectedCallback" zu verzögern (z. B. das Erstellen und Laden eines Bildes). – lonesomeday
@lonesomeday Das ist ziemlich merkwürdig; es scheint nicht auf meiner Seite zu laufen (http://vivacity.fs3d.net/) – jsa