【封装UI组件库系列】封装Icon图标组件
封装UI组件库系列第三篇·封装Icon图标组件
🌟前言
🌟封装Icon
1.创建Icon组件
2.引用svg图标库
第一步
第二步
第三步
3.二次封装
4.封装自定义属性
🌟总结
🌟前言
在前端开发中,大家可能已经用过各种各样的UI组件库了,现在市面上热门的有Element-ui、Ant Design等等,这些即插即用的组件库确实大大提升了开发效率,避免了很多的重复劳动,但这些组件库再怎么完善,又怎么能满足得了我们可爱的产品经理呢
?所以工作中难免会需要开发公司内部的UI组件库,或者基于已有组件库进行二开。
【封装UI组件库系列】文章,将从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》使用自己封装的组件库。技术方面使用的是Vue3 + Vite + Sass 来完成一个模仿Element Plus的组件库。最终完成效果如下:
从零开始封装UI组件库效果演示
🌟封装Icon
1.创建Icon组件
删除components中的内容,新建Icon/Icon.vue 创建组件模板:

接下来在mian.js中引入并注册自定义组件:

2.引用svg图标库
因为我们不可能去一个个画这些图标,所以需要使用到现成的图标库,我这里选择的是fortawesome图标库。
第一步
先安装fortawesome核心包:
pnpm add @fortawesome/fontawesome-svg-core
免费图标包:
pnpm add @fortawesome/free-solid-svg-icons
Vue3版本插件:
pnpm add @fortawesome/vue-fontawesome
第二步
在mian.js中引入注册


第三步
在Icon组件中使用:

3.二次封装
因为Icon组件我们是在fortawesome的基础上进行二次封装,所以还是比较简单,但实际开发中,其实会有比较多的,需要二开的情况存在,这里fortawesome提供的属性也是比较多的,如下:
| 属性名 | 作用 | 类型 | 是否必须 | 默认值 |
|---|---|---|---|---|
| icon | 设置图标 | String | 是 | 无 |
| size | 图标大小 | String | 否 | 无 |
| rotation | 旋转 | [String, Number] | 否 | 无 |
| flip | 翻转 | [String, Number] | 否 | 无 |
| beat | beat动画 | Boolean | 否 | 无 |
| beat-fade | beat-fade动画 | Boolean | 否 | 无 |
| bounce | bounce动画 | Boolean | 否 | 无 |
| fade | fade动画 | Boolean | 否 | 无 |
| shake | shake动画 | Boolean | 否 | 无 |
| spin | spin动画 | Boolean | 否 | 无 |
| spin-reverse | spin-reverse动画 | Boolean | 否 | 无 |
| spin-pulse | spin-pulse动画 | Boolean | 否 | 无 |
那这些已有的属性我们就继承过去,然后也来定义一个属性练练手,因为前面一篇文章中我们已经定义了主题色,及各种类型色,那这里就来定义一个 type控制Icon类型。
新建style/components/icon.scss用来定义Icon组件样式。
先定义一些继承样式并记得在样式入口文件引入:


新建src/components/icon/props.js 这个文件用来定义属性:
先定义一个 icon 属性

因为icon是fortawesome自带的属性,所以我们可以接收一下,然后直接传递给fortawesome:

这时在IconView.vue文件使用 <visual-Icon icon="user-secret"></visual-Icon> :

同理,我们可以在props.js 定义其他fortawesome支持的属性并传值:
// 该文件负责定义组件的属性 props
export default {// 图标icon: {type: String,required: true},// 大小size: {type: String},// 旋转rotation: {type: [Number, String]},// 翻转flip: {type: [Number, String]},// 下面是动画效果相关的属性beat: Boolean,bounce: Boolean,fade: Boolean,shake: Boolean,spin: Boolean,'beat-fade': Boolean,'spin-reverse': Boolean,'spin-pulse': Boolean,// 下面是自定义属性type: String,
}
效果如下:

4.封装自定义属性
上面这些都是自带的,接下来我们再来自定义一个type属性,用来控制图标颜色:
那怎么动态设置样式呢?


这时候可以看到都已经挂上了对应的样式类 :

接下来就是设置样式:

这里使用的是样式类覆盖的方法。这也是后面会大量使用的一种控制样式的方法。
接下来在调用一下看看效果:

如此,本篇关于Icon组件的封装就结束了,还是比较简单,后面篇封装的功能会逐渐增加功能与难度。
🌟总结
【封装UI组件库系列】文章会持续更新,将带着大家从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》最后使用自己封装的组件库。如果文中出现有瑕疵的地方各位通过评论或者私信联系我,我们一起进步!该系列文章建议从第一篇开始看,系列专栏地址:从零开始封装UI组件库完整篇

相关文章:
【封装UI组件库系列】封装Icon图标组件
封装UI组件库系列第三篇封装Icon图标组件 🌟前言 🌟封装Icon 1.创建Icon组件 2.引用svg图标库 第一步 第二步 第三步 3.二次封装 4.封装自定义属性 🌟总结 🌟前言 在前端开发中,大家可能已经用过各种各样的UI组…...
STM32:基本定时器原理和定时程序
一、初识定时器TIM 定时器就是计数器,定时器的作用就是设置一个时间,然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能,还可以实现捕获脉冲宽度,计算PWM占空比,输出PWM波形&am…...
EntityFramework 批量删除操作
刚刚开始使用Entityframwork 来操作数据库。遇到了批量删除数据。 EF内部用的方法是:dbcontext.Datas.RemoveRange(list); 这总方法,少量数据是可行的。 但遇到大数据量的时候,这个方法完全不能用。 所以找了另一种方法: stri…...
springboot使用的设计模式
设计模式是在软件设计中常用的一些通用解决方案。在开发商城编码时,以下设计模式可能会有用: 工厂模式(Factory Pattern): 用于创建对象的模式。在商城中,可能会涉及到创建不同类型的商品、订单等对象&…...
IP地址定位技术发展与未来趋势
随着互联网的快速发展,人们对网络的需求和依赖程度越来越高。在海量的网络数据传输中,IP地址定位技术作为网络安全与信息追踪的重要手段,其精准度一直备受关注。近年来,随着技术的不断进步,IP地址定位的精准度得到了显…...
AI与交通运输
人工智能(AI)正在改变几乎所有行业,交通运输也不例外。 虽然与某些行业相比,我们运输货物和乘客的方式在过去 50 年里变化相对较小,但人工智能有望引发一场运输革命—如果你正在寻找人工智能的机会,不要错过…...
window.requestAnimationFrame+localStorage+canvas实现跨窗口小球连线效果
文章目录 前言效果代码后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端系列文章 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家…...
使用AndResGuard报错:copy res file not in resources.arsc file:Ezi.xml
Android使用AndResGuard进行资源混淆,压缩。 源码地址:GitHub - shwenzhang/AndResGuard: proguard resource for Android by wechat team 集成完成后编译过程中出现如下错误: 14:57:05 copy res file not in resources.arsc file:IUk.xml…...
插入排序(形象类比)
最近在看riscv手册的时候,里面有一段代码是插入排序,但是单看代码的时候有点迷,没看懂咋操作的,后来又查资料复习了一下,最终才把代码看明白,所以写篇博客记录一下。 插入排序像打扑克牌 这是我听到过比较形…...
ElasticSearch 同步的方式
ElasticSearch 同步的方式 ElasticSearch是一款强大的分布式搜索和分析引擎,支持多种方式同步数据和日志。下面介绍几种常见的同步方式: 1. Logstash Logstash 是 ElasticStack 的一部分,用于收集、处理和转发日志和事件数据。通过配置 Lo…...
easyExcel实现分批导入,动态表头分批导出,以及导出表格样式设置
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency> 一,分批导入 1.首先配置表格头映射类 Getter Setter EqualsAndHashCode public class …...
Android BottomNavigationView底部菜单栏文字显示问题
1. BottomNavigationView 如果tab栏数据小于等于3个,那么图标和文字都是展示出来; 2. BottomNavigationView 如果tab栏数据大于3个,那么图标会显示出来,但是文字会隐藏; 3. 解决方式: (当底部…...
从零开始学习typescript——运算符(条件运算法、逻辑运算符、类型运算符、位运算)
条件运算符 条件运算符是一个根据条件返回不同运算结果的运算符 关键字:?: 三元运算符 它可以换成if …else 判断 ? true : false 判断为true,返回?号后面的,判断为false ,返回: 号后面的 逻辑运算符 用…...
【开源】基于Vue.js的康复中心管理系统
项目编号: S 056 ,文末获取源码。 \color{red}{项目编号:S056,文末获取源码。} 项目编号:S056,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…...
抢先看|第二届世界直播电商大会邀您共话时代“新电商”
党的二十大报告指出,要加快发展数字经济,促进数字经济和实体经济深度融合。要深化国家数字经济创新发展试验区建设,打造一批具有国际竞争力的战略性新兴产业集群和数字产业集群。电子商务作为数字经济中规模最大、表现最活跃、发展势头最好的…...
火爆火爆!影响超250万读者,Python入门圣经全新升级!
人生苦短,快学Python! 什么?你没用过,也没开始学习,甚至没有认真了解过这门语言?那你一定这一秒就开始发力——下面让我们先简单看看 Python 有多火。权威编程语言排行榜 TIOBE,2022 和 2023 都…...
大数据学习(23)-hive on mapreduce对比hive on spark
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
通过这个简单的技巧让我们的 JavaScript 代码变得异常快
通过这个简单的技巧让我们的 JavaScript 代码变得异常快 秘诀:了解JavaScript 虚拟机(VM)的内部工作原理。 首先,我们来谈谈像 V8 这样的JavaScript 虚拟机(VM)。可以把它想象成我们的操作的大脑 —— 它将我们简洁的代码变成计算机可以理解和执行的东…...
vue怎么实现国际化? vue-i18n 插件实现国际化,支持切换不同语言
依赖的文档开始 | Vue I18n 一、安装 npm install vue-i18n 如果在一个模块系统中使用它,你必须通过 Vue.use() 明确地安装 vue-i18n: import Vue from vue import VueI18n from vue-i18nVue.use(VueI18n)二、使用 在 src 下创建 lang 文件夹 1.准…...
rabbit MQ的延迟队列处理模型示例(基于SpringBoot延时插件实现)
rabbitMQ安装插件rabbitmq-delayed-message-exchange 交换机由此type 表示组件安装成功 生产者发送消息时设置延迟值 消息在交换机滞纳至指定延迟后,进入队列,被消费者消费。 组件注解类: package com.esint.configs;import org.springfra…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
