Web Component fancy-components

css-doodle 组件库

fancy-components 组件库使用

yarn add fancy-components

 使用:

import { FcBubbles } from 'fancy-components'
new FcBubbles() //要用哪个就new哪个

 new 这里可能会报错eslink,eslintrc.js中处理报错

module.exports = {
  rules: {
    'no-new': 'off'
  }
}

 组件使用:

click 这里是个坑。click是一个关键字,要改成大写 

// click 这里是个坑。click是一个关键字,要改成大写 
 <fc-bubbles Click>
      <img src="/vite.svg" class="logo" alt="Vite logo" />
    </fc-bubbles>

 直接使用自定义组件会有警告:

[Vue warn]: Failed to resolve component: fc-bubbles
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement

  at <App>

 需要配置vite.config.ts

export default defineConfig({
  plugins: [vue({
    template: {
      compilerOptions: {
        isCustomElement: tag => tag.startsWith('fc-')
      }
    }
  })],
})

到这里就能正确使用了。

web components

HTML IMPORTS 已经废弃。最新使用HTML modules 。

 目前还没有浏览器实现

Custom element

customElements.define // 定义组件

customElements.define("word-count", class extends HTMLElement {
  constructor() {
    super();
    this // this=>组件本身
  }
  // 此处编写元素功能
})

当然也可以单独声明,单独使用。

class PopupInfo extends HTMLElement {
  constructor() {
    super();
    this.innerHTML = '123'
  }
  // 此处编写元素功能
}
customElements.define("popup-info", PopupInfo);

扩展fancy-components. 

customElements.get // 获取自定义组件的构造函数

 customElements.whendefined // 定义后的回调,是个异步的方法可以用来默认处理还没声明的组件。

配合伪类选择器(:defined)实现组件未编译前的默认展示

customElements.upgrade // 将先创建的element升级成自定义的组件

生命周期回调

定义在自定义元素的类定义中的特殊回调函数,影响其行为:

  • connectedCallback:当自定义元素第一次被连接到文档 DOM 时被调用。
  • disconnectedCallback:当自定义元素与文档 DOM 断开连接时被调用。
  • adoptedCallback:当自定义元素被移动到新文档时被调用。
  • attributeChangedCallback:当自定义元素的一个属性被增加、移除或更改时被调用。

 attributeChangedCallback不会自动更新需要手动更新,需要搭配observedAttributes 使用

 static observedAttributes = ["color", "size"];

 

再搭配 get set 实现属性 

set color (value) => {
     this.setAttriabute('color', value);
}
get color () => {
    return this.getAttribute("color")
}

自定义标签里面的 内置元素Safari不支持。要支持可以用profily

// 第三个参数必填否则会报错 

<p is="word-count"></p>
// Create a class for the element
class WordCount extends HTMLParagraphElement {
  constructor() {
    // Always call super first in constructor
    super();

    // count words in element's parent element
    var wcParent = this.parentNode;

    function countWords(node) {
      var text = node.innerText || node.textContent;
      return text.split(/\s+/g).length;
    }

    var count = "Words: " + countWords(wcParent);

    // Create a shadow root
    var shadow = this.attachShadow({ mode: "open" });

    // Create text node and add word count to it
    var text = document.createElement("span");
    text.textContent = count;

    // Append it to the shadow root
    shadow.appendChild(text);

    // Update count when element content changes
    setInterval(function () {
      var count = "Words: " + countWords(wcParent);
      text.textContent = count;
    }, 200);
  }
}

// Define the new element
// 第三个参数必填否则会报错
customElements.define("word-count", WordCount, { extends: "p" });

通过js添加到页面。

参考大神张鑫旭的博客:Safari不支持build-in自定义元素的兼容处理 « 张鑫旭-鑫空间-鑫生活 

Shadow DOM(影子 DOM)

可以被挂载的 shadow DOM 元素 查看mdn

要注意的是,不是每一种类型的元素都可以附加到 shadow root(影子根)下面。出于安全考虑,一些元素不能使用 shadow DOM(例如<a>),以及许多其他的元素。

var shadowroot = element.attachShadow(shadowRootInit);

 

// 为新元素创建一个类
class WordCount extends HTMLParagraphElement {
  constructor() {
    // 在构造器中先调用一下 super
    super();

    // 计数器指向元素的父级
    var wcParent = this.parentNode;

    function countWords(node) {
      var text = node.innerText || node.textContent;
      return text.trim().split(/\s+/g).length;
    }

    var count = "Words: " + countWords(wcParent);

    // 创建一个 shadow root
    var shadow = this.attachShadow({ mode: "open" });

    // 创建文本节点并向其添加计数器
    var text = document.createElement("span");
    text.textContent = count;

    // 将其添加到 shadow root 上
    shadow.appendChild(text);

    // 当元素内容发生变化时更新计数
    setInterval(function () {
      var count = "Words: " + countWords(wcParent);
      text.textContent = count;
    }, 200);
  }
}

// 定义新元素
customElements.define("word-count", WordCount, { extends: "p" });

HTML template(HTML 模板)

<table id="producttable">
  <thead>
    <tr>
      <td>UPC_Code</td>
      <td>Product_Name</td>
    </tr>
  </thead>
  <tbody>
    <!-- 现有数据可以可选地包括在这里 -->
  </tbody>
</table>

<template id="productrow">
  <tr>
    <td class="record"></td>
    <td></td>
  </tr>
</template>

// 通过检查来测试浏览器是否支持 HTML 模板元素
// 用于保存模板元素的内容属性。
if ("content" in document.createElement("template")) {
  // 使用现有的 HTML tbody 实例化表和该行与模板
  let t = document.querySelector("#productrow"),
    td = t.content.querySelectorAll("td");
  td[0].textContent = "1235646565";
  td[1].textContent = "Stuff";

  // 克隆新行并将其插入表中
  let tb = document.getElementsByTagName("tbody");
  let clone = document.importNode(t.content, true);
  tb[0].appendChild(clone);

  // 创建一个新行
  td[0].textContent = "0384928528";
  td[1].textContent = "Acme Kidney Beans";

  // 克隆新行并将其插入表中
  let clone2 = document.importNode(t.content, true);
  tb[0].appendChild(clone2);
} else {
  // 找到另一种方法来添加行到表,因为不支持 HTML 模板元素。
}
HTML template(HTML 模板)Shadow DOM(影子 DOM)参考mdn
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: “qt canpool fancy demo”在中文中意思是“使用Qt可以创建华丽的演示”。Qt是一个开源的跨平台应用程序开发框架,它提供了丰富的图形界面和功能库,可用于创建各种类型的应用程序,包括演示。 Qt Canpool Fancy Demo为开发者提供了一个用于展示Qt框架强大功能的例子。通过使用Qt的图形界面系统和图形渲染引擎,开发者可以创建出华丽的、吸引人的演示。这些演示可以包含各种特效、动画、渐变和其他视觉元素,以展示Qt的灵活性和多样性。 Qt Canpool Fancy Demo还可以展示Qt的多平台兼容性。Qt可以在多种操作系统上运行,包括Windows、macOS、Linux等等。这意味着您可以使用Qt来创建适用于不同平台的演示,以满足不同用户的需求。 此外,Qt Canpool Fancy Demo还可以展示Qt图形用户界面设计器的优势。Qt提供了一个可视化界面设计器,使开发者能够通过简单拖拽组件的方式进行界面设计。这个设计工具非常强大且易于使用,使得开发者可以在短时间内创建出华丽的演示。 总的来说,Qt Canpool Fancy Demo展示了Qt框架作为一个功能强大的应用程序开发工具的能力。无论是在图形界面设计、特效展示还是多平台兼容性方面,Qt都可以帮助开发者创建出华丽而且功能丰富的演示。 ### 回答2: Qt Canpool Fancy Demo是一个使用Qt框架开发的漂亮的演示程序。 该演示程序使用了Qt的图形界面和动画特效功能,展示了一些引人注目的特性。它有一个精致的用户界面,设计简洁而美观。用户可以通过演示程序中的按钮和菜单来进行各种操作。 Qt Canpool Fancy Demo演示了一些高级的图形特效,如淡入淡出、旋转和缩放。用户可以通过控制面板来调整这些特效的参数,使得演示效果更加个性化。同时,程序还展示了一些图形控件的使用方法,如按钮、滑动条和进度条等。 除了图形特效,Qt Canpool Fancy Demo还提供了一些实用的功能。例如,用户可以通过程序中的文件浏览器来选择和编辑文件,还可以通过网络浏览器来访问网站。这些功能增加了应用程序的实用性和趣味性。 通过Qt的跨平台特性,Qt Canpool Fancy Demo可以运行在多种操作系统上,如Windows、MacOS和Linux等。这使得用户可以在不同的设备上获得相同的优秀使用体验。 总体而言,Qt Canpool Fancy Demo是一个用Qt开发的令人赏心悦目的演示程序,融合了图形特效、实用功能和跨平台优势。无论是作为学习Qt开发的入门示例,还是用作参考和灵感的源泉,该演示程序都能够为用户带来很多乐趣和启发。 ### 回答3: Qt Canpool Fancy Demo是一个使用Qt框架编写的演示程序。这个演示程序采用了qtcanpool库来实现多线程并行计算的功能。 在这个演示中,通过多线程计算和并行处理,可以提高程序的计算效率和响应速度。当程序运行时,它会将计算任务分配给多个线程,每个线程会同时执行一部分任务,然后将结果汇总。 Qt Canpool Fancy Demo的界面设计精美,采用了Qt的图形界面库来创建演示程序的用户界面。用户可以通过演示程序的界面来输入计算任务的参数和数据,然后点击开始按钮来启动计算过程。 在计算过程中,演示程序会动态显示计算进度和计算结果。通过多线程并行计算,程序可以更快地完成计算任务,并将计算结果显示给用户。 此外,Qt Canpool Fancy Demo还提供了一些额外的功能,例如任务管理、线程调度和错误处理等。这些功能使得程序更加健壮和高效,用户可以更轻松地使用和控制程序的运行。 总之,Qt Canpool Fancy Demo是一个使用Qt框架开发的演示程序,通过多线程并行计算来提高计算效率和响应速度。它具有精美的界面设计和丰富的功能,非常适合用于演示和教学等用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值