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

vue3中引入svg矢量图

vue3中引入svg矢量图

  • 1、前言
  • 2、安装SVG依赖插件
  • 3、在vite.config.ts 中配置插件
  • 4、main.ts入口文件导入
  • 5、使用svg
    • 5.1 在src/assets/icons文件夹下引入svg矢量图
    • 5.2 在src/components目录下创建一个SvgIcon组件
    • 5.3 封装成全局组件,在src文件夹下创建plugin/index.ts
    • 5.4 在main.ts中引入plugin/index.ts文件
    • 5.5 在页面使用

1、前言

在项目开发过程中,我们经常会用到svg矢量图,而且我们使用svg以后,页面上加载的不再是图片资源,这对页面性能来说是个很大的提升,而且我们svg文件比img要小的很多,放在项目中几乎不占用资源。

2、安装SVG依赖插件

npm install vite-plugin-svg-icons -Dyarn add vite-plugin-svg-icons -Dpnpm install vite-plugin-svg-icons -D

3、在vite.config.ts 中配置插件

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default () => {return {plugins: [createSvgIconsPlugin({iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],symbolId: 'icon-[dir]-[name]',}),],}
}

4、main.ts入口文件导入

import 'virtual:svg-icons-register'

5、使用svg

5.1 在src/assets/icons文件夹下引入svg矢量图

在这里插入图片描述

5.2 在src/components目录下创建一个SvgIcon组件

<template><svg :style="{ width, height }"><use :xlink:href="prefix + name" :fill="color"></use></svg>
</template><script setup>
defineProps({// 是否显示prefix: {type: String,default: '#icon-',},name: String,color: {type: String,default: '#000',},width: {type: String,default: '16px',},height: {type: String,default: '16px',},})
</script><style lang='scss' scoped></style>

5.3 封装成全局组件,在src文件夹下创建plugin/index.ts

//引入项目中的全局组件
import SvgIcon from '@/components/svgIcon.vue'//全局对象
const allGlobalComponents = { SvgIcon }//对外暴露插件对象
export default {install(app) {//注册项目的全部组件Object.keys(allGlobalComponents).forEach((key) => {//注册为全局组件app.component(key, allGlobalComponents[key])})},
}

5.4 在main.ts中引入plugin/index.ts文件

import GlobalComponents from '@/plugin'
app.use(GlobalComponents)

5.5 在页面使用

<svg-icon name="tick" width="20px" height="20px"></svg-icon>

相关文章:

  • 【漏洞复现】Array VPN任意文件读取漏洞
  • 数字逻辑电路基础-时序逻辑电路之移位寄存器
  • 利用chart.js来完成动态网页显示拆线图的效果
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • 文件属性和路径
  • isis基础大全学习案例
  • 【SpringCloud】微服务的扩展性及其与 SOA 的区别
  • 防火墙命令行基础配置实验(H3C模拟器)
  • 为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?
  • echarts 几千条分钟级别在小时级别图标上展示
  • JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
  • JavaScript 原型,原型链的特点
  • [PyTorch][chapter 64][强化学习-DQN]
  • 微软 Edge 浏览器目前无法支持 avif 格式
  • Labelme加载AI(Segment-Anything)模型进行图像标注
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android交互
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • HTML5新特性总结
  • HTTP请求重发
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java IO学习笔记一
  • pdf文件如何在线转换为jpg图片
  • PHP变量
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 番外篇1:在Windows环境下安装JDK
  • 基于组件的设计工作流与界面抽象
  • 计算机常识 - 收藏集 - 掘金
  • 跨域
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 算法之不定期更新(一)(2018-04-12)
  • 网络应用优化——时延与带宽
  • 硬币翻转问题,区间操作
  • 原生 js 实现移动端 Touch 滑动反弹
  • 怎么将电脑中的声音录制成WAV格式
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #控制台大学课堂点名问题_课堂随机点名
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (007)XHTML文档之标题——h1~h6
  • (4)logging(日志模块)
  • (八)c52学习之旅-中断实验
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (译)2019年前端性能优化清单 — 下篇
  • (转) Face-Resources
  • (转)AS3正则:元子符,元序列,标志,数量表达符