如何通过 J*aScript 的 Web Components 技术创建可复用的自定义元素?


答案:Web Components 通过 Custom Elements、Shadow DOM 和 HTML Templates 封装可复用组件。首先定义继承 HTMLElement 的类并用 customElements.define() 注册自定义标签,实现基础行为;接着在构造函数中调用 attachShadow() 创建 Shadow DOM,隔离内部结构与样式,避免全局污染;然后结合 预定义组件模板,提升渲染性能与代码组织性;最后通过 observedAttributes() 监听属性变化,在 attributeChangedCallback 中响应更新,实现动态交互。示例包括 my-button、my-card、my-alert 和 my-toggle 等组件,支持内容分发(slot)和状态切换。该技术原生支持现代浏览器,适用于构建高内聚、低耦合的 UI 组件库,尤其适合跨项目复用和设计系统建设。

如何通过 javascript 的 web components 技术创建可复用的自定义元素?

使用 J*aScript 的 Web Components 技术创建可复用的自定义元素,核心在于结合 Custom ElementsShadow DOMHTML Templates 三大标准 API。这样可以封装样式、结构和行为,实现真正独立、可复用的组件。

定义并注册自定义元素

通过 customElements.define() 方法注册一个继承自 HTMLElement 的类,即可创建自定义 HTML 标签。

class MyButton extends HTMLElement { constructor() { super(); // 初始化逻辑 this.textContent = this.getAttribute('label') || '点击我'; this.style.padding = '10px 20px'; this.style.background = '#007bff'; this.style.color = 'white'; this.style.borderRadius = '4px'; this.style.cursor = 'pointer'; }

connectedCallback() { // 元素插入页面时绑定事件 this.addEventListener('click', () => { alert('按钮被点击!'); }); } }

customElements.define('my-button', MyButton);

之后就能在 HTML 中直接使用:<my-button label="提交"></my-button>

使用 Shadow DOM 封装内部结构

Shadow DOM 能隔离组件的样式和结构,避免与页面其他部分冲突。

class MyCard extends HTMLElement { constructor() { super(); // 创建影子根 const shadow = this.attachShadow({ mode: 'open' });
// 构建内部结构
const wrapper = document.createElement('div');
wrapper.innerHTML = `
  <style>
    .card {
      border: 1px solid #ddd;
      border-radius: 8px;
      padding: 16px;
      background: #f9f9f9;
      box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    }
    h3 { margin-top: 0; color: #333; }
  </style>
  <div class="card">
    <h3>${this.getAttribute('title') || '默认标题'}</h3>
    <slot></slot> <!-- 支持内容分发 -->
  </div>
`;

shadow.appendChild(wrapper);

} }

customElements.define('my-card', MyCard);

用法示例:

姓名:张三

年龄:25

Facetune Facetune

一款在线照片和视频编辑工具,允许用户创建AI头像

Facetune 109 查看详情 Facetune

结合

将组件模板写在 <template></template> 中,可以提前声明结构,延迟渲染,提高效率。

<script> class MyAlert extends HTMLElement { constructor() { super(); const template = document.getElementById('my-alert-template'); const content = template.content.cloneNode(true); this.attachShadow({ mode: 'open' }).<a style="color:#f60; text-decoration:underline;" title= "app"href="https://www.php.cn/zt/16186.html" target="_blank">appendChild(content); } } customElements.define('my-alert', MyAlert); </script>

这样写更清晰,尤其适合复杂组件。

支持属性监听与状态更新

通过 static get observedAttributes() 监听属性变化,动态更新组件。

class MyToggle extends HTMLElement { static get observedAttributes() { return ['on']; }

constructor() { super(); this.attachShadow({ mode: 'open' }); this.render(); }

attributeChangedCallback(name, oldValue, newValue) { if (name === 'on') { this.render(); } }

render() { const isOn = this.hasAttribute('on'); this.shadowRoot.innerHTML = <button style=" background: ${isOn ? '#28a745' : '#dc3545'}; color: white; border: none; padding: 8px 16px; border-radius: 4px; "> ${isOn ? '开启' : '关闭'} </button> ; } }

customElements.define('my-toggle', MyToggle);

调用方式:<my-toggle on></my-toggle> 或通过 JS 修改属性触发更新。

基本上就这些。Web Components 原生支持现代浏览器,无需框架也能构建高复用、低耦合的 UI 组件,特别适合设计系统或跨项目共享组件。不复杂但容易忽略细节,比如 Shadow DOM 的样式隔离机制和 slot 使用规范。掌握后能显著提升前端工程化能力。

以上就是如何通过 J*aScript 的 Web Components 技术创建可复用的自定义元素?的详细内容,更多请关注其它相关文章!


# 三大  # 高青县网站建设  # 德州网站优化平台  # 直通车怎么用seo  # 网站推广技术推 荐乐云seo  # 一站式网站推广优化价格  # 做网站建设推广赚钱吗  # 舟山慧抖销seo优化  # 推广品牌营销案例  # SEO各个标签的含义  # 云南seo计划  # 提示信息  # 能在  # 适用于  # javascript  # 也能  # 压缩解压  # 键值  # 最短  # 复用  # 自定义  # app  # 浏览器  # node  # 前端  # js  # html  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 鸣潮历史学家灯塔位置一览  风车动漫官网首页入口登录 风车动漫在线观看正版地址  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  《密马》发布账号方法  《大周列国志》皇帝律令功能介绍  百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  《漫蛙manwa2》防走失网页版链接2025  济南公交卡手机充值指南  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  歌词怎么展示在|直播|间视频号?有什么注意事项?  mysql中外键约束如何使用_mysql FOREIGN KEY操作  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  苹果SE如何开启单手模式_苹果SE单手操作功能  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  4399正版网页版入口高清直达链接  《杖剑传说》食谱大全  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  《虎扑》关闭社区内容推荐方法  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  热血江湖归来医师加点攻略  iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程  QQ网页版入口导航 QQ网页版在线访问通道  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务  《百度畅听版》关闭兴趣推荐方法  圆通快递官方入口不需要登录 在线查询入口快速查询  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  Go语言中方法接收器的选择:值类型还是指针类型?  视频号视频怎么提取文案?提取的文案如何优化与使用?  《宝可梦大集结》S4冠军之路开始时间介绍  《淘宝联盟》推广自己的店铺方法  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  PHP utf8_encode 字符编码转换陷阱与解决方案  4399造梦西游3无敌版_4399游戏入口  《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局  Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】  之了课堂app做题入口  韩剧圈正版官网入口_韩剧圈官方指定登录  《猎聘》筛选猎头岗位方法  店铺如何做视频号推广?做视频号推广有用吗?  《深林》冬季章节图文攻略  PHP utf8_encode 字符编码转换疑难解析与最佳实践  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  《米姆米姆哈》米姆获取及技能攻略  顺丰官方查单号入口 顺丰快递单号查询官网入口 

 2025-10-09

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.