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图标名称

三,效果

相关推荐
岁月宁静2 分钟前
AI 多模态全栈项目实战:Vue3 + Node 打造 TTS+ASR 全家桶!
vue.js·人工智能·node.js
9坐会得自创8 分钟前
使用marked将markdown渲染成HTML的基本操作
java·前端·html
Hilaku8 分钟前
当 Gemini 3 能写出完美 CSS 时,前端工程师剩下的核心竞争力是什么?
前端·javascript·ai编程
最贪吃的虎30 分钟前
什么是开源?小白如何快速学会开源协作流程并参与项目
java·前端·后端·开源
裴嘉靖31 分钟前
Vue + ECharts 实现图表导出为图片功能详解
前端·vue.js·echarts
用泥种荷花32 分钟前
【LangChain学习笔记】输出解析器
前端
闲云一鹤1 小时前
Cesium 使用 Turf 实现坐标点移动(偏移)
前端·gis·cesium
Thomas游戏开发1 小时前
Unity3D IL2CPP如何调用Burst
前端·后端·架构
多仔ヾ1 小时前
Vue.js 前端开发实战之 01-Vue 基础入门
vue.js