| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇 -> 正文阅读 |
|
[JavaScript知识库]vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇 |
在 《基于 vite 创建 vue3 全家桶》一文整合了 Element Plus,并将 Element Plus 中提供的图标进行全局注册,这样可以很方便的延续 Element UI 的风格 —— 通过 el-icon-xxx 的方式使用图标(如果有问题的朋友可以先阅读前面的文章:基于 Vite 创建 vue3 全家桶项目)。 在真实的企业级开发中,Element Plus 内置的图标通常很难满足业务需求,项目中需要引入大量的 SVG 图标资源,本文描述如何在 Vue3 + Vite2 环境中使用 SVG 图标,封装一个支持本地 SVG 图标和在线 SVG 图标的组件 svg-icon。
1 创建组件在 src/components/ 目录下创建目录 svg-icon,该在目录中创建 svg-icon 组件 index.vue。 1.1 输入属性该组件需要两个输入属性(props):
代码如下:
1.2 SVG 图标样式在 style 中定义 svg-icon 的样式类:
2 在线 SVG 图标svg-icon 组件需要支持在线 SVG 图标和本地 SVG 图标。首先实现在线 SVG 图标的显示。如下 URL 为一个在线 SVG 图标,可在浏览器中直接访问:
2.1 判断在线图标在 script 中通过计算属性判断 props 中的 icon 是否是在线图标:
该判断比较简单,如果 icon 属性以 http: 或 https: 开头,则该图标为在线图标,其他情况均为本地的 SVG 图标。各位朋友可以根据自己项目情况添加或完善该判断逻辑。 2.2 模板和样式在线 SVG 图标通过 HTML 元素 div 来显示,css3 有个 mask 属性,该属性表示遮罩,可以部分或者完全隐藏一个元素的可见区域,使用方式与 background 很类似。 template 如下:
style 追加 svg-icon-online 样式类:
上面的 template 和 style 使用到 vue3 的新特性,演示了如何将一个 script 中的 props 属性传递给 scss“:
3.3 测试在线图标在 about.vue 中引入 svg-icon :
测试使用该组件:
添加自定义样式:
在浏览器中访问 about 页面,可以看到在线 SVG 图标可以成功显示: 3 本地 SVG 图标在 webpack 中加载 svg 资源可以使用 svg-sprite-loader,而 vite 中可以使用插件 vite-plugin-svg-icons。 3.1 安装开发依赖首先安装 vite-plugin-svg-icons 为开发依赖:
3.2 配置 vite在 vite.config.ts 中配置该插件:
通过 createSvgIconsPlugin() 入参指定了svg 文件所在的目录和 symbolId。 3.3 修改 main.ts在 main.ts 中添加如下语句:
3.4 完成 svg-icon 组件通过上述步骤,便完成了 vite-plugin-svg-icons 的配置,接下来实现 svg-icon 组件即可。前面已经完成了在线 svg、样式等,现在只需要在 template 中补充本地 svg 的代码即可:
组件 components/svg-icon/index.vue 完整代码如下:
3.5 测试本地图标由于 vite.config.ts 中配置的 svg 目录为 src/svg,首先将 car.svg 拷贝到该目录下。继续在 about.vue 中添加如下代码:
上面的代码分别显示在线图标和本地图标,页面显示结果如下: 可以看出在线图标、本地图标、自定义样式类都可以正常显示,这样便完成了 svg-icon 的封装。 感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,作者会持续与大家分享更多干货 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 14:41:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |