如何使用 Web 组件将默认 HTML 元素扩展为 "customized built-in element"?
How to extend default HTML elements as a "customized built-in element" using Web Components?
我希望了解如何使用较新的 HTML5 Web 组件规范扩展默认 HTML 元素。我在这里尝试了 Google 概述的示例:https://developers.google.com/web/fundamentals/getting-started/primers/customelements
他们是:
匿名函数:
customElements.define('bigger-img', class extends Image {
// Give img default size if users don't specify.
constructor(width=50, height=50) {
super(width * 10, height * 10);
}
}, {extends: 'img'});
在 HTML 中为:
<img is="bigger-img" width="15" height="20">
和
命名函数:
// See https://html.spec.whatwg.org/multipage/indices.html#element-interfaces
// for the list of other DOM interfaces.
class FancyButton extends HTMLButtonElement {
constructor() {
super(); // always call super() first in the ctor.
this.addEventListener('click', e => this.drawRipple(e.offsetX, e.offsetY));
}
// Material design ripple animation.
drawRipple(x, y) {
let div = document.createElement('div');
div.classList.add('ripple');
this.appendChild(div);
div.style.top = `${y - div.clientHeight/2}px`;
div.style.left = `${x - div.clientWidth/2}px`;
div.style.backgroundColor = 'currentColor';
div.classList.add('run');
div.addEventListener('transitionend', e => div.remove());
}
}
customElements.define('fancy-button', FancyButton, {extends: 'button'});
在 HTML 中:
<button is="fancy-button" disabled>Fancy button!</button>
我无法让这些示例中的任何一个在 Chrome 中工作 55. 创建自定义的内置元素不起作用是怎么回事?我试过将 JS 和 HTML 放在不同的顺序中,并在示例中将 HTMLImageElement 换成图像。任何帮助将不胜感激!
这是因为自定义内置元素尚未在 Chrome / Opera 中实现。检查 this issue.
中 Chromium 开发人员的状态
只有自治自定义元素已在本机实现。
同时你应该使用像 WebReflection's one 这样的 polyfill。
更新自 Chrome67
现在它适用于 Chrome 67 版及更高版本。
我希望了解如何使用较新的 HTML5 Web 组件规范扩展默认 HTML 元素。我在这里尝试了 Google 概述的示例:https://developers.google.com/web/fundamentals/getting-started/primers/customelements
他们是:
匿名函数:
customElements.define('bigger-img', class extends Image {
// Give img default size if users don't specify.
constructor(width=50, height=50) {
super(width * 10, height * 10);
}
}, {extends: 'img'});
在 HTML 中为:
<img is="bigger-img" width="15" height="20">
和
命名函数:
// See https://html.spec.whatwg.org/multipage/indices.html#element-interfaces
// for the list of other DOM interfaces.
class FancyButton extends HTMLButtonElement {
constructor() {
super(); // always call super() first in the ctor.
this.addEventListener('click', e => this.drawRipple(e.offsetX, e.offsetY));
}
// Material design ripple animation.
drawRipple(x, y) {
let div = document.createElement('div');
div.classList.add('ripple');
this.appendChild(div);
div.style.top = `${y - div.clientHeight/2}px`;
div.style.left = `${x - div.clientWidth/2}px`;
div.style.backgroundColor = 'currentColor';
div.classList.add('run');
div.addEventListener('transitionend', e => div.remove());
}
}
customElements.define('fancy-button', FancyButton, {extends: 'button'});
在 HTML 中:
<button is="fancy-button" disabled>Fancy button!</button>
我无法让这些示例中的任何一个在 Chrome 中工作 55. 创建自定义的内置元素不起作用是怎么回事?我试过将 JS 和 HTML 放在不同的顺序中,并在示例中将 HTMLImageElement 换成图像。任何帮助将不胜感激!
这是因为自定义内置元素尚未在 Chrome / Opera 中实现。检查 this issue.
中 Chromium 开发人员的状态只有自治自定义元素已在本机实现。
同时你应该使用像 WebReflection's one 这样的 polyfill。
更新自 Chrome67
现在它适用于 Chrome 67 版及更高版本。