Web Components

Web Components标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为custom elements(自定义标签),可以使用CustomElementRegistry来管理自定义标签

javascript 复制代码
<script>
    //1、创建自定义标签
    class NewElement extends HTMLElement {
        constructor () {
            super();
            // 在此定义自定义标签
            // 创建一个shadow根标签
            let shadow = this.attachShadow({mode: 'open'});
            // 创建我们需要的标签
            let wrapper = document.createElement('div');
            let iconBox = document.createElement('div');
            let textBox = document.createElement('div');
        
            // 为标签添加样式
            wrapper.setAttribute('class', 'wapper');
            iconBox.setAttribute('class', 'icon');
            textBox.setAttribute('class', 'text');
        
            let text = this.getAttribute('text'); // 获取标签里面传递的值
            textBox.textContent = text;
        
            let imgUrl;
            if(this.hasAttribute('img')) {
                imgUrl = this.getAttribute('img');
            } else {
                imgUrl = 'default.png'; // 设置一个默认图片
            }
            var img = document.createElement('img');
            img.src = imgUrl;
            iconBox.appendChild(img);
        
            // 书写样式
            var style = document.createElement('style');
            let lStyleStr = '.wrapper { display: flex; justify-content: center; align-items: center; width: 100%; height: 50px;}';
            lStyleStr += '.icon {margin-right: 10px; width: 50px; height: 50px;}';
            lStyleStr += '.icon img { width: 100%; height: 100%;}';
            lStyleStr += '.text { flex: 1; font-size: 14px; color: #333; line-height: 50px;}';
            style.textContent = lStyleStr;
        
            // 将样式和dom元素挂载到页面
            shadow.appendChild(style);
            shadow.appendChild(wrapper);
            wrapper.appendChild(iconBox);
            wrapper.appendChild(textBox);
        }
    }
    
    //2、注册自定义标签
    customElements.define('new-element', NewElement);    
</script>
 
 //3、使用
<body>
    <new-element img="you_picture.jpg" text="你的文字"></new-element>
</body>
相关推荐
小码哥_常21 小时前
Kotlin 助力 Android 启动“大提速”
前端
GreenTea1 天前
AI 时代,工程师的不可替代性在哪里
前端·人工智能·后端
Jagger_1 天前
能不能别再弄低代码害人了
前端
朦胧之1 天前
AI 编程开发思维
前端·后端·ai编程
踩着两条虫1 天前
VTJ:快速开始
前端·低代码·架构
木斯佳1 天前
前端八股文面经大全:携程前端一面(2026-04-17)·面经深度解析
前端·状态模式
Java后端的Ai之路1 天前
LangChain ReAct Agent 核心技术问答
前端·react.js·langchain
码喽7号1 天前
Vue学习七:MockJs前端数据模拟
前端·vue.js·学习
NotFound4861 天前
探究分享从对话到执行:OpenTiny NEXT 如何重塑前端智能化开发范式
前端