web components试用

Web Component 详解 Web Component 使用介绍 阅读详情

Web Components原生的组件模式,主要有customElement,shadowDom,template等,本次主要用customElement注册自定义元素组件,shadowDom存放组件内容

说明:

  • 目前我知道的渲染后使用web components的框架有腾讯omi, 谷歌polymer两个;omi看了一下很简单,使用jsx语法或不使用构建工具的话用h渲染函数也可以,所以自己手写试试。
  • 本次试用学到的东西:
  1. web components使用es6 class定义组件!!继承(extends HTMLElement或某个已有元素如HTMLButtonElement),customElement.define(tagName, className) 注册组件
  2. 组件内样式独立(scoped);shadow-dom是某些原生元素的实现(如video等),可以简化页面结构
  • 其他:如果兼容性好的话真是不错的选择(也有pollyfill),毕竟原生还是好

效果:(浏览器不打开shadow-dom显示的话时看不到web components里面的东西的哦,详情百度一下)

1、HTML:

<body>
  <hello-web-components></hello-web-components>
  <num-input
    data-value="1"
    data-price="9.99"
    data-out=""
  ></num-input>
  <script src="./component-hello.js"></script>
  <script src="./component-num-input.js"></script>
</body>

 2、组件:

a.构造器:初始化运行的代码都放这里,包括组件样式,事件的绑定,组件内元素的生成等

constructor() {
    super();
    // this.dataset
    
    // 添加shadowDom
    let shadowRoot = this.attachShadow({mode: 'open'});
    let styles = `
      hello-web-components {color: red;}
      h3 {font-weight: normal;}
      .num-input-content {margin: 10px 0;}
      .num-input {text-align: center;}
    `;
    shadowRoot.innerHTML = `
      <style>${styles}</style>
      <div class="num-input-content">
        <button class="decrease">-</button>
        <input type="text" class="num-input" value="${this.dataset.value}"/>
        <button class="increase">+</button>
        <span>价格:<b class="price">${this.dataset.price}</b>元</span>
      </div>
    `;

    this.numInput = this.shadowRoot.querySelector('.num-input');  // 数量
    this.price = this.shadowRoot.querySelector('.price'); // 价格

    // 获取shadowDom下的元素
    let decrease = this.shadowRoot.querySelector('.decrease');
    let increase = this.shadowRoot.querySelector('.increase');

    // 绑定事件
    decrease.addEventListener('click', this.decrease.bind(this), false);
    increase.addEventListener('click', this.increase.bind(this), false);
  }

b.事件函数:与constructor同级,位于组件类的根

// -
  decrease() {
    this.dataset.value--;
    this.update();
  }
  // +
  increase() {
    this.dataset.value++;
    this.update();
  }
  // update
  update() {
    // 更新数值
    this.numInput.setAttribute('value', this.dataset.value);
    let allPrice = this.dataset.value*this.dataset.price;
    this.price.innerText = allPrice;

    // 输出结果到:host元素
    this.dataset.out = JSON.stringify({
      value: this.dataset.value,
      price: allPrice
    });
  }

3、注册组件: 


// 注册 <num-input></num-input> 元素
customElements.define('num-input', NumInput)

完整的component-num-input.js:

// component-num-input.js
class NumInput extends HTMLElement {
  constructor() {
    super();
    // this.dataset
    
    // 添加shadowDom
    let shadowRoot = this.attachShadow({mode: 'open'});
    let styles = `
      hello-web-components {color: red;}
      h3 {font-weight: normal;}
      .num-input-content {margin: 10px 0;}
      .num-input {text-align: center;}
    `;
    shadowRoot.innerHTML = `
      <style>${styles}</style>
      <div class="num-input-content">
        <button class="decrease">-</button>
        <input type="text" class="num-input" value="${this.dataset.value}"/>
        <button class="increase">+</button>
        <span>价格:<b class="price">${this.dataset.price}</b>元</span>
      </div>
    `;

    this.numInput = this.shadowRoot.querySelector('.num-input');  // 数量
    this.price = this.shadowRoot.querySelector('.price'); // 价格

    // 获取shadowDom下的元素
    let decrease = this.shadowRoot.querySelector('.decrease');
    let increase = this.shadowRoot.querySelector('.increase');

    // 绑定事件
    decrease.addEventListener('click', this.decrease.bind(this), false);
    increase.addEventListener('click', this.increase.bind(this), false);
  }
  // -
  decrease() {
    this.dataset.value--;
    this.update();
  }
  // +
  increase() {
    this.dataset.value++;
    this.update();
  }
  // update
  update() {
    // 更新数值
    this.numInput.setAttribute('value', this.dataset.value);
    let allPrice = this.dataset.value*this.dataset.price;
    this.price.innerText = allPrice;

    // 输出结果到:host元素
    this.dataset.out = JSON.stringify({
      value: this.dataset.value,
      price: allPrice
    });
  }
}

// 注册 <num-input></num-input> 元素
customElements.define('num-input', NumInput)

 

【Python百日进阶-Web开发-Feffery】Day341 - “一起Dash”训练营Lesson-01:dash开发环境的准备 文章目录前言:fac是什么?“人生苦短,我用Python;Web开发,首选Feffery!”↓↓↓ 今日笔记 ↓↓↓一、开发环境配置1.1 miniconda下载与安装1.1.1 miniconda下载1.1.2 miniconda安装1.2 miniconda创建虚拟环境1.3 安装dash和feffery-antd-components(fac)1.4 配置虚拟环境的解释器二、简单项目示例2.1 页面效果2.2 项目代码 前言:fac是什么? feffery-antd-components(简称fa 阅读详情

相关推荐

WebComponents插件

比如说,登录了海康摄像头,在预览中看着,画面是黑的,就需要使用这个插件。当然必须是有IE内核的。 原来分数太高,又不是自己写的,所以降低分数。

前端Pollyfill的常见实现

Polyfill的准确意思为:用于实现浏览器并不支持的原生API的代码。 Polyfill典故: Polyfill或者Polyfiller,是英国Web开发者 Remy Sharp 在咖啡店蹲坑的时候拍脑袋造出来的。当时他想用一个词来形容"用JavaScript(或者Flash之类的什么鬼)来实现一些浏览器不支持的原生API"。Shim这个已经有的词汇第一时间出现在他的脑海里。但是他回头想了一下Shim一般有自己的API,而不是单纯实现原生不支持的API。苦思冥想一直想不到合适的单词,于是他一怒之下造了一

weixin_40082785的博客 1551

WebComponentsKit.exe

WebComponentsKit.exe 海康威视监控插件 海康威视摄像头插件 免费下载

Web Components 是个什么样的东西

HTML Imports 是一种在 HTMLs 中引用以及复用其他的 HTML 文档的方式。这个 Import 很漂亮,可以简单理解为我们常见的模板中的include之类的作用。我们最常见的引入一个 css 文件的方式是:这个东西很简单,用过 handlebars 的人都知道有这么一个东西:其他模板引擎也有类似的东西,那么 HTML Templates 便是把这个东西官方标准化,提供了一个template标签来存放以后需要但是暂时不渲染的 HTML 代码。

2401_84434237的博客 555

海康webcomponents最新版64位,32位(内附各种功能演示demo,支持rtsp流媒体播放)

海康webcomponents最新版64位,32位(内附各种功能演示demo,支持rtsp流媒体播放),通过浏览器web方式采用rtsp视频流技术直接打开摄像头视频的方法(chrome/IE/firefox/360等)

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 424

Web Component -- 即将爆发的原生的 UI 组件化标准

Web Component 概述 Web Component 是一种用于构建可复用用户界面组件的技术,开发者可以创建自定义的 HTML 标签,并将其封装为包含逻辑和样式的独立组件,从而在任何 Web 应用中重复使用。每个 Web Component 都具有自己的 DOM 和样式隔离,避免了全局 CSS 和 JavaScript 的冲突问题。它还支持自定义事件和属性,可以与其他组件进行通信和交互。不...

tonylua的博客 8286

deepfake detection数据集

最全Deepfake数据集总结,包含各个数据集下载链接: https://github.com/deepfakeinthewild/deepfake_in_the_wild Dataset name Download Generate method Deepfake videos Actors Deepfake-TIMIT low download De...

where_is_horse的博客 1万+

WebComponents.exe插件安装后依然提示安装插件解决问题方法

使用海康威视的摄像头使用网页查看监控页面,提示需要安装插件,安装完成后打开网页查看依然提示安装插件 后来经过查询后发现安装插件后需要使用ie内核的浏览器打开才能加载此插件进行显示,解决方法就是使用ie内核如ie浏览器 ...

stars的博客 3万+

FPGA学习笔记(一)入门背景、软件及时钟约束的概念及程序下载与固化

使用正点原子的PFPGA开拓者V2学习,通过b站上正点原子的手把手教你学FPGA-基于开拓者V2学习。

贾saisai的博客 3280

[Dify] 多步对话流程的实现技巧:构建连贯自然的多轮交互系统

摘要:本文探讨了AI系统中实现多轮对话的核心技术与应用方法。文章首先分析了多步对话的典型场景(如机票预订、财务报告生成)及其价值,提出了Dify平台实现该功能的三大机制:变量系统、条件控制和状态管理。随后详细介绍了顺序型、条件型和确认型三种基本对话模式,并通过"会议预约助手"案例展示了实际应用流程。文章还提供了提示词设计、变量引用等实用建议,并强调多轮对话成功的关键在于清晰的结构设计而非单纯依赖模型能力,最终实现自然流畅的人机交互体验。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1343

Dash_html_Components程序包已弃用。请将`IMPORT DASH_html_Components替换为html

首先,我们需要在项目中更新`Dash`包,因为从`dash>=1.0.0`开始,使用`html`和`dash_core_components`等组件的方式已经不再推荐。我们需要将导入语句从`import dash_html_components as html`改写为直接导入`dash.dependencies`中的`Input`, `Output`, `State`, `Event`, `Component`以及相关的布局、输入控件和输出控件模块。假设我们有一个简单的Web应用,用于展示当前日期和时间。

629

msfvenom制作windows/linux/android/ios木马

msfvenom选项如下 -p, --payload<payload> 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled <length>为payload预先指定一个NOP滑动长度。 -f, --format <format>指定输出格式(使

Cwillchris的博客 2734

5分钟上手Minze:Web Components极简JS框架npm、CDN、create-minze脚手架三种安装方式全解析

Minze 是一个面向原生 Web Components 的极简 JavaScript 框架,压缩后体积仅约 3KB。无论你选择用 npm 安装、CDN 直接引入,还是用 create-minze 脚手架一键生成开发环境,本文都会带你 5 分钟上手 Minze 的三种安装方式——无需复杂构建工具,即可写出第一个自定义组件。 [![Minze Web Components 框架安装指南封面图](h

gitblog_00160的博客 770

【离线OCR】微信离线实现图片OCR文本和表格识别

基于微信本地OCR引擎(由最新版微信自动安装)。通过Python对其官方调用逻辑进行完整翻译和封装,使开发者可以用简单的API调用其强大的OCR功能。

专注于医院数据分析技术与系统开发的创作与分享。 2625

基于Claude Code的 规范驱动开发(SDD)指南

传统的AI辅助开发,如同手工作坊,我们向AI描述想法,它给我们零散的部件,我们再手动打磨、组装。这个过程充满了不确定性、信息损耗和重复劳动。本指南将尝试引领您进入软件开发的“工业时代”。在这里,

形上得其象,形下合于数;阴阳自济,玄理自明。 2750

Material Components Web Floating Label 完全指南:原理、Sass 定制与框架集成

Floating Label(浮动标签)是 Material Design Web(MDC Web)中服务于 Text Field 与 Select 的核心组件,它用一段始终可见、可"浮动"、可"抖动"的文本标注来提示输入框的类型与校验状态。本文以 [packages/mdc-floating-label/README.md](https://link.gitcode.com/i/20a4761c

gitblog_01416的博客 773

基于MATLAB自动发电控制(AGC)仿真系统的设计与实现:电力系统频率稳定与功率平衡的深入解析

自动发电控制(AGC)是电力系统运行中的一个关键功能,其主要任务是通过自动调节发电机组的输出功率,使得电网中的频率稳定在规定范围内,并维持发电与负荷的动态平衡。当电力负荷发生变化时,AGC会立即响应,调整发电机的功率输出,以避免电网频率的剧烈波动。维持系统频率稳定:电网频率通常应维持在标准值(例如50Hz或60Hz)附近。当负荷波动或电力需求突然变化时,AGC通过调节发电机输出,确保频率不发生过大的偏离。实现区域内的功率平衡。

qq_38334677的博客 1112

Stoplight Elements Web Components终极指南:无需框架的API文档解决方案

Stoplight Elements Web Components是一个强大的开源工具,让你无需复杂框架即可轻松构建美观、交互式的API文档。它基于OpenAPI和Markdown,提供了灵活的嵌入选项,适合各种网站和应用场景。无论你是新手还是有经验的开发者,都能快速上手并创建专业级API文档。 ## 为什么选择Web Components版本? Web Components是现代前端开发的重

gitblog_00917的博客 385

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Material Components Web Tab Bar 完全指南:安装、API、键盘导航与框架集成

Tab Bar(标签栏)是 Material Design 中用于组织同层级相关内容、并支持在其间切换导航的核心组件。本文以 `@material/tab-bar` 包(本仓库 [packages/mdc-tab-bar](https://link.gitcode.com/i/76ea1a37a22420d57d090294239442eb))的官方 README 为主体,结合其源码实现(组件、F

gitblog_00098的博客 479

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Omi 组件属性 Props 完全指南:JSX 传参、类型声明与跨框架原生使用

Props(属性)是 Omi 组件体系中父子组件通信的核心通道,也是 Web Components 自定义元素对外暴露数据的标准接口。本文以 Omi 官方文档的 Props 章节为骨架,结合仓库内框架源码([packages/omi/src/component.ts](https://link.gitcode.com/i/81f82745701dce49566eb2d08f6995d0))、类型声

gitblog_00699的博客 1127

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

前端技术雷达:2026 下半年值得关注的新工具与新范式

技术雷达不是预测未来,是梳理当下值得关注的信号。2026 年上半年,前端领域出现了若干值得追踪的新工具和范式变化。本文按"采纳、试验、评估、暂缓"四个象限分类,给出 2026 下半年的技术决策参考。

大山哥 3048

Cropper.js 2.x 核心 API 权威指南:Cropper 构造函数、选项、实例方法与自定义模板

Cropper.js 2.x 以 Web Components 技术重构了整个图片裁剪生态,而 `Cropper` 类则是这套组件体系的统一入口:它负责把一张 `<img>` 或 `<canvas>` 包装成可交互的裁剪器,并在容器中注入由一组 `cropper-*` 自定义元素组成的裁剪 UI。本文以 [docs/zh/api/index.md](https://link.gitcode.com

gitblog_00952的博客 1046

Cropper.js API 深度解析:Cropper 构造函数、Options 与实例方法完整指南

Cropper.js 2.0 是一个基于 Web Components 的模块化 JavaScript 图像裁剪库。本文以 [docs/api/index.md](https://link.gitcode.com/i/6be1311a2c15c763e822ea1e1b3644d4) 为骨架,结合仓库源码([packages/cropperjs/src/index.ts](https://link

gitblog_00967的博客 368

终极Material Web Components指南:5步打造精美无障碍Web应用

Material Web Components是一套基于Material Design规范构建的Web组件库,它让开发者能够轻松创建视觉精美、交互友好且无障碍的现代Web应用。无论是初学者还是资深开发者,都能通过这套组件库快速实现符合设计标准的用户界面,同时确保跨浏览器兼容性和最佳用户体验。 ## 什么是Material Web Components? Material Web Compone

gitblog_00301的博客 946

为什么选择webcomponentsjs?探索Web Components Polyfills的核心优势

webcomponentsjs是一套支持HTML Web Components规范的Polyfills解决方案,它能够帮助开发者在各种浏览器环境中实现Web Components的强大功能。作为一款成熟的Web Components Polyfills,webcomponentsjs为前端开发带来了诸多核心优势,让开发者能够更加轻松地构建现代化的Web应用。 ## 1. 全面的跨浏览器兼容性

gitblog_00284的博客 878
上一篇: 记一次js数字上翻变动简单实现(比较简陋)
哪个菜鸟
博客等级 码龄10年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值