新闻中心

J*aScriptWeb组件_CustomElementsAPI

2025-11-30
浏览次数:
返回列表
Custom Elements API 允许开发者定义自定义 HTML 标签并赋予其行为与结构,通过 customElements.define() 注册,支持自主元素(如 )和基于原生元素扩展的内置元素(如 ),结合生命周期回调(connectedCallback、attributeChangedCallback 等)实现组件逻辑控制,配合 Shadow DOM 可达成样式隔离,适用于构建高复用、轻量级、原生封装的 UI 组件库。

javascriptweb组件_customelementsapi

Custom Elements API 是 Web Components 的核心部分之一,它允许开发者定义自己的 HTML 标签,并赋予这些标签自定义的行为和结构。通过 J*aScript 来注册新的元素类型,你可以创建可复用、封装良好的组件,直接在 HTML 中使用,无需依赖框架。

什么是 Custom Elements

Custom Elements 让你能够创建全新的 HTML 元素,比如 <my-button></my-button>。这些元素可以像原生标签一样被使用,同时拥有自己的逻辑、样式和生命周期。

浏览器通过 customElements.define() 方法来注册一个自定义元素,该方法接收两个参数:元素名称(必须包含短横线)和一个继承自 HTMLElement 的类。

示例:
class MyButton extends HTMLElement {
  constructor() {
    super();
    this.textContent = '点击我';
    this.style.padding = '10px';
    this.style.background = '#007bff';
    this.style.color = 'white';
    this.style.borderRadius = '4px';
    this.addEventListener('click', () => {
      alert('按钮被点击!');
    });
  }
}

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

之后就可以在 HTML 中使用:

<my-button></my-button>

自定义元素的类型

Custom Elements 分为两种类型:自主自定义元素(Autonomous Custom Elements)和自定义内置元素(Customized Built-in Elements)。

  • 自主自定义元素:完全独立的新标签,不继承任何现有 HTML 元素行为。如上面的 。元素名必须包含短横线(-),避免与未来 HTML 标签冲突。
  • 自定义内置元素:基于现有 HTML 元素扩展功能。例如让一个按钮表现得像
示例:扩展原生 button
class FancyButton extends HTMLButtonElement {
  connectedCallback() {
    this.style.fontSize = '18px';
    this.style.background = 'linear-gradient(to right, #ff7e5f, #feb47b)';
  }
}

customElements.define('fancy-button', FancyButton, { extends: 'button' });

使用时需写成:

21st.dev 21st.dev

开源的UI组件资源平台

21st.dev 65 查看详情 21st.dev
<button is="fancy-button">渐变按钮</button>

生命周期回调

自定义元素类中可以定义多个生命周期钩子,用于控制组件在不同阶段的行为:

  • connectedCallback:元素插入 DOM 时调用,适合绑定事件或渲染内容。
  • disconnectedCallback:元素从 DOM 移除时调用,可用于清理定时器或事件监听。
  • attributeChangedCallback:当观察的属性发生变化时触发,需配合 observedAttributes 静态属性使用。
  • adoptedCallback:元素被移动到新文档时调用(较少使用)。
示例:响应属性变化
class UserCard extends HTMLElement {
  static get observedAttributes() {
    return ['name', 'role'];
  }

  attributeChangedCallback(name, oldValue, newValue) {
    if (name === 'name') {
      this.innerHTML = `姓名:${newValue}`;
    }
  }
}

customElements.define('user-card', UserCard);

此时修改 name 属性会触发更新:

<user-card name="张三"></user-card>

实际应用建议

使用 Custom Elements 可以构建高度封装的组件库,尤其适合设计系统或跨项目复用 UI 模块。

  • 确保元素命名符合规范(带短横线),避免命名冲突。
  • 结合 Shadow DOM 使用,实现样式隔离和真正封装。
  • 合理利用生命周期管理状态和资源释放。
  • 对于复杂组件,可结合模板(

基本上就这些。Custom Elements 提供了原生级别的组件化能力,不依赖框架也能写出结构清晰、易于维护的前端代码。虽然生态上不如 React 或 Vue 丰富,但在轻量级场景或追求性能时非常有价值。

以上就是J*aScriptWeb组件_CustomElementsAPI的详细内容,更多请关注其它相关文章!


# 多个  # 金坛网站推广代运营招聘  # 品牌推广跟品牌营销  # 网络营销app推广软件  # 秦皇岛哪里的网站建设好  # 合肥地图推广招聘网站  # seo如何优化内容页  # 威海抖音seo优化排名  # 企业英文网站营销推广  # 嵩明网站优化电话  # 南翔营销推广功能  # 适用于  # 但在  # 也能  # vue  # 你可以  # 让你  # 回调  # 自己的  # 复用  # 自定义  # 浏览器  # 前端  # html  # java  # javascript  # react 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  mysql如何设置表访问权限_mysql表访问权限配置  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  照顾宝贝2小游戏点击立即在线玩  抖音网页版怎么|直播|_抖音网页版开播操作指南  AO3官方在线访问地址 Archive of Our Own最新镜像合集  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  163邮箱注册官网 免费申请163个人邮箱  小米汽车11月交付量突破40000台!雷军:将继续努力  怎么在mac上运行html代码_mac运行html代码方法【指南】  Log4j Console Appender性能瓶颈与高并发优化策略  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  J*aScriptWebpack优化_J*aScript构建工具实战  从J*aScript对象中精确提取指定属性的教程  ArrayList与LinkedList操作复杂度详解:遍历与修改  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  火锅吃太多会怎样 火锅吃太多会上火吗  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  poki网页游戏推荐_poki免费游戏平台入口  微信网页版官方入口教程 微信网页版网页版快速登录步骤  将JSON对象数组转置为键值对列表的实用指南  必由学官方平台入口 必由学在线课堂登录地址  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  QQ网页版官方账号入口 QQ网页版网页版登录指南  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  4399网页游戏电脑版全新入口 4399电脑端在线玩指南  零跑汽车11月交付量达70327台 实现连续9个月正增长  高德地图公交到站提醒失败如何解决 高德提醒权限设置  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  必由学官方登录入口 必由学教师学生账号快速访问  HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  解决Flask中Quill编辑器内容提交失败及TypeError的指南  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  ACG动漫视频网入口 ACG动漫*免费正版观看地址  大象笔记网页版入口 印象笔记网页版登录入口  AI泡沫首次被“刺破”:GPU十年都无法存活! 

搜索