Vue3项目使用SVG图标

GitHub代码地址:GitHub - seapack-hub/seapack-template: seapack-template框架

一,前置工作

(一)安装依赖 vite-plugin-svg-icons

vite-plugin-svg-icons 的优点
预加载 : 在项目运行时就生成所有图标,只需操作一次 dom
高性能: 内置缓存,仅当文件被修改时才会重新生成

typescript 复制代码
npm install vite-plugin-svg-icons -D

(二)配置

在vite.config.ts中进行配置

typescript 复制代码
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default () => {
  return {
    plugins: [
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/icons')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',
      }),
    ],
  }
}

在main.ts文件中引入

typescript 复制代码
// 本地SVG图标
import 'virtual:svg-icons-register'

二,使用

(一)封装组件

创建一个SPIcon组件,封装svg。避免重复编码

vue 复制代码
<template>
  <svg aria-hidden="true" class="svg-icon" :style="{height:size,width:size}">
    <use :xlink:href="symbolId" :fill="color"></use>
  </svg>
</template>

<script setup lang="ts">
import {computed} from 'vue'
const props = defineProps({
  //图标大小
  size:{
    type:[Number,String],
    default: '16px'
  },
  //图标颜色
  color:{
    type:String,
    default:"#606266"
  },
  //图标前缀,默认icon
  prefix:{
    type:String,
    default:'icon'
  },
  //图标名称
  name:{
    type:String,
    default:""
  }
});
const symbolId = computed(()=>`#${props.prefix}-${props.name}`);
</script>

<style scoped lang="scss">

</style>

注意: symbolId 的值需要与 vite.config.ts中配置的保持一致。

最终symbolId的值格式为#icon-svgName

(二)组件内使用

使用封装好的组件

(三)对应svg文件

svg图标名称

三,效果

相关推荐
LSL666_15 小时前
4 jQuery、JavaScript 作用域、闭包与 DOM 事件绑定
前端·javascript·html
yinuo15 小时前
前端跨页面通讯终极指南⑤:window.name 用法全解析
前端
小飞侠在吗15 小时前
vue computed 和 watch
前端·javascript·vue.js
yinuo15 小时前
前端跨页面通讯终极指南④:MessageChannel 用法全解析
前端
前端布鲁伊16 小时前
聊聊前端容易翻车的“环境管理”
前端·面试
毕设十刻16 小时前
基于Vue的考勤管理系统8n7j8(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
coding随想16 小时前
掌控选区的终极武器:getSelection API的深度解析与实战应用
java·前端·javascript
嵌入式小能手16 小时前
飞凌嵌入式ElfBoard-文件I/O的深入学习之存储映射I/O
java·前端·学习
沐风。5617 小时前
Object方法
开发语言·前端·javascript
程序猿小蒜17 小时前
基于springboot的医院资源管理系统开发与设计
java·前端·spring boot·后端·spring