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

Vue—— Vue3 SVG 图标系统设计与实现

背景问题:
需要统一管理项目中的图标资源。

方案思考:
使用 SVG 图标系统,便于管理和使用。

具体实现:
首先安装必要的依赖:

npminstallvite-plugin-svg-icons

配置 Vite 插件:

// vite.config.jsimport{defineConfig}from'vite'import{createSvgIconsPlugin}from'vite-plugin-svg-icons'importpathfrom'path'exportdefaultdefineConfig({plugins:[createSvgIconsPlugin({// 指定需要缓存的图标文件夹iconDirs:[path.resolve(process.cwd(),'src/assets/icons')],// 指定symbolId格式symbolId:'icon-[dir]-[name]',})],})

创建 SVG 图标组件:

<!-- components/SvgIcon.vue --> <template> <svg :class="svgClass" aria-hidden="true" v-on="$attrs"> <use :href="iconName" :fill="color" /> </svg> </template> <script setup> import { computed } from 'vue' const props = defineProps({ name: { type: String, required: true }, color: { type: String, default: '#333' }, className: { type: String, default: '' } }) const iconName = computed(() => `#icon-${props.name}`) const svgClass = computed(() => { if (props.className) { return `svg-icon ${props.className}` } return 'svg-icon' }) </script> <style scoped> .svg-icon { width: 1em; height: 1em; position: relative; fill: currentColor; vertical-align: -2px; } </style>

在 main.js 中注册插件:

// main.jsimport{createApp}from'vue'import{register}from'vite-plugin-svg-icons/client'constapp=createApp(App)// 注册 SVG 图标register(app)

使用示例:

<template> <div class="icon-demo"> <SvgIcon name="home" /> <SvgIcon name="user" /> <SvgIcon name="setting" /> <SvgIcon name="search" color="#409EFF" /> </div> </template> <script setup> import SvgIcon from '@/components/SvgIcon.vue' </script>

完整的图标文件结构:

src/ assets/ icons/ home.svg user.svg setting.svg search.svg

其中 SVG 文件示例:

<!-- src/assets/icons/home.svg --><svgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 1024 1024"><pathd="M1024 512c0 282.77-229.23 512-512 512S0 794.77 0 512 229.23 0 512 0s512 229.23 512 512z"fill="#2c2c2c"/></svg>
http://www.jsqmd.com/news/287489/

相关文章:

  • Vue—— Vue 3动态组件与条件渲染优化
  • Unity游戏翻译工具:突破语言壁垒的游戏本地化解决方案
  • uni-app——uni-app 小程序表单页面键盘弹起布局错乱问题
  • LRPC无提示模式真香!YOLOE自动发现所有物体
  • 视频下载工具深度测评:Downkyi与同类工具全方位对比及应用指南
  • MinerU镜像预装了什么?核心依赖与模型路径全解析
  • 2024文档处理入门必看:MinerU开源模型+GPU加速实战指南
  • YOLO11实际项目应用:仓储货物识别系统搭建全过程
  • 为什么GPEN推理总失败?CUDA 12.4环境适配教程是关键
  • Glyph低成本部署方案:中小企业也能用的大模型
  • Qwen2.5-0.5B监控告警:Prometheus集成部署教程
  • 3分钟上手!这款开源抽奖工具让公平抽奖系统秒变活动策划神器
  • JetBrains IDE试用期重置全攻略:让开发工具持续为你服务
  • NewBie-image-Exp0.1保姆级教程:从容器启动到首图生成详细步骤
  • RePKG:Wallpaper Engine资源处理全攻略 解锁创意素材新可能
  • Llama3-8B值得商用吗?月活7亿内合规使用部署指南
  • 法律助手起步:Qwen2.5-7B行业知识注入实践
  • 避坑指南:Live Avatar部署常见问题与解决方案
  • JetBrains IDE试用期重置全攻略:零基础上手的终极解决方案
  • 科研党福音!CAM++在说话人聚类中的应用示例
  • 如何用开源抽奖工具打造企业级抽奖系统?3大核心优势解析
  • 5分钟搞定Linux开机启动脚本,测试镜像一键部署实测
  • 开源机械臂从零构建全攻略:打造你的协作机器人开发平台
  • Open-AutoGLM避坑总结:这些错误千万别犯
  • Z-Image-Turbo_UI界面性能优化,提升生成速度小技巧
  • BERT中文填空服务实战:成语识别准确率提升技巧参数详解
  • Qwen3-4B实战案例:财务报告自动生成系统部署
  • 突破3D打印瓶颈的秘密武器:Blender3MFFormat插件全攻略
  • 小熊猫Dev-C++零基础上手指南:从环境配置到效率提升的避坑指南
  • NCMconverter完全指南:NCM格式解密与音频转换全攻略