从小我就喜欢经典的卡通频道标志。
我创建了一个自定义 HTML 元素,使文本具有不同的颜色。
class CartoonNetworkify extends HTMLElement { // respond to color updates static observedAttributes = ['color1','color2']; constructor() { super(); } connectedCallback() { let words = this.innerText.split(' '); this.attachShadow({mode:'open'}); var root = this.shadowRoot; var table = document.createElement('table'); // longest word length let maxLength = words.reduce((max,w, i)=> w.length > max ? w.length: max, Number.MIN_VALUE); // default black & white var color1 = this.getAttribute('color1') || 'black'; var color2 = this.getAttribute('color2') || 'white'; words.reduce((tbody,line,i,words)=>{ // pad for extra space line = line.padEnd(maxLength); let trow = line.split('').reduce((trow,letter,j)=>{ // create cells let td = trow.insertCell(); td.innerText = letter.toUpperCase(); let odd = i%2 == j%2; td.dataset.odd = odd; td.style.backgroundColor=odd?color1:color2; td.style.color = odd?color2:color1; return trow; }, tbody.insertRow()); return tbody; }, table.createTBody()); root.append(table); // add style from template let template = document.getElementById('cartoon-networkify-template'); root.append(template.content.cloneNode(true)); } // update attributes later attributeChangedCallback(name,oldValue, newValue) { if(this.shadowRoot) { this.shadowRoot.querySelectorAll('td').forEach((td)=> { var odd = td.dataset.odd == 'true'; if(name=='color1') { td.style[odd?'backgroundColor':'color'] = newValue ; } else if(name == 'color2') { td.style[odd?'color':'backgroundColor'] = newValue ; } }); } } }
有任何问题请随时问我。
要了解有关自定义元素的更多信息,请访问 MDN。
以上是带有 Web 组件的卡通网络徽标的详细内容。更多信息请关注PHP中文网其他相关文章!