当前位置: 首页 > news >正文

小白系列Vite-Vue3-TypeScript:010-封装svg

上一篇我们介绍了Vite+Vue3+TypeScript项目中mockjs的安装和配置i。本篇我们来介绍封装SVG图标组件。

svg特征

  • Preloading所有图标都是在项目运行时生成的,只需要操作一次dom即可。

  • 高性能内置缓存,仅在文件被修改时才会重新生成。

安装插件vite-plugin-svg-icons

//安装依赖
npm i vite-plugin-svg-icons -D

配置vite.config.ts

在vite.config.ts中添加相关配置内容

//引入依赖
import path from "path";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";//启用插件
createSvgIconsPlugin({// 指定图标文件夹,绝对路径(NODE代码)iconDirs: [path.resolve(process.cwd(), "src/svgs")],
}),

创建图标库

项目src文件夹下新建svgs文件夹,随便导入一个svg图标文件,这里我下载了两个图标user.svg和pwd.svg

封装SvgIcon组件

在components文件夹下创建SvgIcon组件,代码如下

<template><svg aria-hidden="true" class="svg-icon" :style="{ width: width + 'px', height: height + 'px', color: color }"><use :xlink:href="symbolId" /></svg>
</template><script lang="ts">
import { defineComponent, computed } from "vue";
export default defineComponent({name: "SvgIcon",props: {// 使用的svg图标名称,也就是svg文件名name: {type: String,required: true,},prefix: {type: String,default: "icon",},color: {type: String,default: "#fff",},width: {type: String,default: '32'},height: {type: String,default: '32'}},setup(props) {const symbolId = computed(() => `#${props.prefix}-${props.name}`);return { symbolId };},
});
</script><style scope>
.svg-icon {fill: currentColor;
}
</style>

全局引入

创建完组建后,我们需要在main.ts中对组件进行全局引入

// 引入Svg组件
import "virtual:svg-icons-register";
import SvgIcon from "./components/SvgIcon.vue";

这样我们就可以在项目中直接使用SvgIcon组件来展示图标了

<svg-icon name="pwd" width="48" height="48" color="#ffff00"></svg-icon>

Svg图标使用

在src/views/index.vue中添加svg图片,引入图标规则,svgs文件夹下的直接name="文件名"即可,如果存在文件夹包裹,则遵循规则name="文件夹名-文件名"

<div><h1>SVG 图标使用</h1><svg-icon name="user" width="64" height="64"></svg-icon><svg-icon name="login-pwd" width="48" height="48" color="#ffff00"></svg-icon>
</div>

注意:如果想要让color属性生效(修改图标颜色),首先要svg图标支持fill属性修改才可以。我们可以在编辑器打开svg,然后把fill或者strock的值改成currentColor即可。

运行效果

至此,SvgIcon组件封装完成!

我相信,每天学习一点点,收获成长亿点点!
http://www.lryc.cn/news/8356.html

相关文章:

  • 卷严重、难度高、激励少,如何适应空投市场新变化
  • 基于Java与JSP的文件上传和下载
  • Gromacs中的g_mmpbsa计算带电底物与蛋白的结合能不准确
  • 【mmrotate】旋转目标检测之训练DOTA数据集
  • 图基本概念
  • 机器学习基础
  • FreeRTOS-Tickless低功耗模式 | FreeRTOS十四
  • 实现了统一消息中心的微服务基础框架 JVS,快点赞收藏
  • VMware 安装 OpenWrt 旁路由并配置 PassWall
  • R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案
  • 嵌入式开发:你需要知道的5种简单
  • MVC与MVVM
  • Cortex-M0异常和中断
  • 数据库(6)--存储过程
  • c++ 指针、引用和常量
  • 1、HAL库UART 中断|DMA 自动回显接收数据
  • NPOI - ConditionalFormattingRule
  • JavaのString类这一篇就够了(包含StringBuffer_Builder)
  • C# dataGridView 导出表格 xls NPOI 2.4.1 版本
  • 秒杀项目的消息推送
  • 最近开发及 vue3 几个小总结
  • 代谢组学分享-花青素通过调节氨基酸代谢改善糖尿病肾病的肾功能
  • 超简单!pytorch入门教程:Tensor
  • 如何使用COCO数据集,注意事项
  • 金三银四跳槽季,JAVA面试撸题就来【笑小枫】微信小程序吧~
  • 分享115个HTML电子商务模板,总有一款适合您
  • Python 字符串
  • 总线定义,车载总线:车载etherNet or CAN
  • Python(for和while)循环嵌套及用法
  • 6万字电力行业系统解决方案光伏电站综合安防系统解决方案