【封装UI组件库系列】封装Icon图标组件

news2024/9/25 7:24:18

封装UI组件库系列第三篇·封装Icon图标组件

🌟前言

🌟封装Icon

1.创建Icon组件

 2.引用svg图标库

第一步

 第二步

 第三步

3.二次封装

4.封装自定义属性

 🌟总结


🌟前言

在前端开发中,大家可能已经用过各种各样的UI组件库了,现在市面上热门的有Element-uiAnt 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]
beatbeat动画Boolean
beat-fadebeat-fade动画Boolean
bouncebounce动画Boolean
fadefade动画Boolean
shakeshake动画Boolean
spinspin动画Boolean
spin-reversespin-reverse动画Boolean
spin-pulsespin-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组件库完整篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习【01】相关环境的安装

学习实例 参考资料&#xff1a;联邦学习实战{杨强}https://book.douban.com/subject/35436587/ 项目地址&#xff1a;https://github.com/FederatedAI/Practicing-Federated-Learning/tree/main/chapter03_Python_image_classification 一、环境准备 GPU安装CUDA、cuDNN pytho…

(二)C语言之变量与算数运算表达式概述

C语言之变量与算数运算表达式概述 一、华氏温度与摄氏温度对照二、代码概述三、练习 一、华氏温度与摄氏温度对照 #include <stdio.h>/*当华氏温度为 0,20,40,...300时&#xff0c;打印出华氏温度与摄氏温度对照表华氏温度与摄氏温度 C(5/9)(̧F-32) 其中C表示摄氏温度&…

Jenkins Ansible 参数构建

首先在Jenkins中创建自由项目 在web端配置完成后在另一台机子上下载nginx 在gitlab端创建项目并创建文件配置代码 在有Jenkins的机器上下载Ansible [rootslave1 ~]# yum -y install epel-release [rootslave1 ~]# yum -y install ansible再进入下载nginx机器中克隆gitlab项目…

【CCF-PTA】第03届Scratch第01题 -- 梦醒时分

梦醒时分 【题目描述】 睡眠是人体正常的生理需要&#xff0c;同年龄男女睡眠时间无明显差别&#xff0c;一般是8小时左右。居家的小明作息生活很规律&#xff0c;晚上11点睡觉&#xff0c;早晨7点起床学习。请你编写程序来判断&#xff0c;每周&#xff08;共168小时&#x…

YOLO目标检测——垃圾检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;智能化垃圾分类系统、垃圾回收和处理领域的优化管理等方面数据集说明&#xff1a;垃圾分类检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含报纸、蛋壳、矿泉水瓶、电池、拉链顶罐、塑料餐盒、纸质药盒、香蕉皮…

协同过滤与矩阵分解讲解(PPT)

总览 协同过滤算法&#xff0c;就是一种完全依赖用户和物品之间行为关系的推荐算法。 从字面理解&#xff0c;协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出用户可能感兴趣的信息。 知识概括 从这几个方面进行分析。 一、基于用户的协同过滤 显示…

富士康转移产线和中国手机海外设厂,中国手机出口减少超5亿部

富士康和苹果转移生产线对中国手机制造造成了巨大的影响&#xff0c;除此之外&#xff0c;中国手机企业纷纷在海外设厂也在减少中国手机的出口&#xff0c;2022年中国的手机出口较高峰期减少了5.2亿部。 手机是中国的大宗出口商品&#xff0c;不过公开的数据显示2022年中国的手…

深入了解Java8新特性-日期时间API_LocalDate类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概12000多字&#xff0c;预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…

【Python】批量将PDG合成PDF,以及根据SS号重命名秒传的文件

目录 说明批量zip2pdf批量zip2pdf下载SS号重命名源代码SS号重命名源代码下载附录&#xff0c;水文年鉴 说明 1、zip2pdf是一个开源软件&#xff0c;支持自动化解压压缩包成PDG&#xff0c;PDG合成PDF&#xff0c;笔者在其基础上做了部分修改&#xff0c;支持批量转换。 2、秒…

SQL LIKE 运算符:用法、示例和通配符解释

SQL中的LIKE运算符用于在WHERE子句中搜索列中的指定模式。通常与LIKE运算符一起使用的有两个通配符&#xff1a; 百分号 % 代表零个、一个或多个字符。下划线 _ 代表一个单个字符。 以下是LIKE运算符的用法和示例&#xff1a; 示例 选择所有以字母 “a” 开头的客户&#x…

如何应用ChatGPT撰写、修改论文及工作报告,提供写作能力及优化工作??

如果我想让gpt从pdf文档中提取相关关键词的内容&#xff0c;可以怎么做呢&#xff1f;&#xff1f;我们评论区讨论 ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&am…

【SpringMVC】 三层架构

一.lombok工具包 中央仓库查找这个工具包:https://mvnrepository.com/ 给类添加Data注解就可以获取gettter和setter方法 , 这样我们就不必写getter 和 setter 方法. 也可以给成员属性添加单独的getter 和 setter , 针对某个成员属性单独添加setter或setter方法. 二.如果使用spr…

Leetcode173. 二叉搜索树迭代器

Every day a Leetcode 题目来源&#xff1a;173. 二叉搜索树迭代器 解法1&#xff1a;中序遍历 我们可以直接对二叉搜索树做一次完全的递归遍历&#xff0c;获取中序遍历的全部结果并保存在数组中。随后&#xff0c;我们利用得到的数组本身来实现迭代器。 代码&#xff1a…

Python生产、消费Kafka

如果想通过docker安装kafka&#xff0c;可参考 Docker安装Kafka 生产者 import json import time import tracebackfrom datetime import datetime from kafka import KafkaProducer from kafka.errors import kafka_errorsproducer KafkaProducer(bootstrap_servers[localho…

JSP:Servlet

Servlet处理请求过程 B/S请求响应模型 Servlet介绍 JSP是Servlet的一个成功应用&#xff0c;其子集。 JSP页面负责前台用户界面&#xff0c;JavaBean负责后台数据处理&#xff0c;一般的Web应用采用JSPJavaBean就可以设计得很好了。 JSPServletJavaBean是MVC Servlet的核心…

NOIP2003提高组第二轮T3:加分二叉树

题目链接 [NOIP2003 提高组] 加分二叉树 题目描述 设一个 n n n 个节点的二叉树 tree \text{tree} tree 的中序遍历为 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;其中数字 1 , 2 , 3 , … , n 1,2,3,\ldots,n 1,2,3,…,n 为节点编号。每个节点都…

抖音汽车租赁小程序背后的技术挑战与解决方案

随着共享经济的不断发展&#xff0c;抖音上的汽车租赁小程序也逐渐崭露头角。然而&#xff0c;这背后涉及的技术挑战却不容小觑。本文将深入探讨抖音汽车租赁小程序的技术挑战&#xff0c;并提出相应的解决方案。 一、实时位置追踪 汽车租赁小程序的核心在于用户能够实时追踪…

JS中reduce函数的使用

一&#xff1a;函数解释 reduce()是一个对数组中的每个元素按照顺序依次执行自定义函数的方法。 就是遍历数组&#xff0c;每个元素都执行相同的方法。 二&#xff1a;实际应用 accumulator和currentValue分别用acc和cur表示哈&#xff0c;举例如下&#xff1a; 应用例子①…

赛迪生电源充电模块维修CHR-22005 RCU-202A

通信电源维修品牌&#xff1a;英可瑞,许继,艾默生,通合,动力源,九洲,华隆,合欣,泰坦,赛迪生等 直流屏模块故障和解决办法&#xff1a; 1、针对各类变电站直流屏&#xff0c;若显示交流空开跳闸&#xff0c;但并没有动作。应当检查三处地方是否正确&#xff1a; 接线是否正确…

SWT/Jface(2): 表格的编辑

前言 上节说到, 创建和渲染表格需要如下几个步骤: 接收源数据数组(也可以是单个对象或者其他集合类型): TableViewer.setInput(Object)渲染接收的数据 渲染表头: TableViewer.setLabelProvider(IBaseLabelProvider)渲染内容: TableViewer.setContentProvider(IContentProvide…