• Vue--整合SVG Icon图标--方法/实例


    原文网址:Vue--整合SVG Icon图标--方法/实例_IT利刃出鞘的博客-CSDN博客

    简介

    说明

            本文介绍Vue如何整合SVG图标。

    前端图标的发展

    从上到下是从古至今的顺序

    1. 使用img实现
      1. 一个页面的请求资源中图片 img 占了大部分
    2. image sprite(雪碧图)
      1. 将多个图片合成一个图片,然后利用 css 的 background-position 定位显示不同的 icon 图标
      2. 是为了优化方案1而提出的。
      3. 维护困难。每新增一个图标,都需要改动原始图片,还可能影响到前面定位好的图片。
    3. font库
      1. 优点:使用方便
      2. 缺点:找起来不方便,定制化很差,Icon不好看
    4. iconfont
      1. 阿里做的
      2. 图标数量多,有几百个公司的开源图标库,有各式各样的小图标,支持自定义创建图标库。

    SVG的好处

            可以轻松地按比例放大和缩小图标。SVG图标是矢量图,具有优于位图图形的优点,即按比例放大或缩小时它们仍然看起来不错。而位图图形在按比例放大时趋于像素化,而在按比例缩小时会失去质量(像素)。

    1.创建Vue项目

    见:@vue/cli4--使用图形化界面创建项目--方法/实例_IT利刃出鞘的博客-CSDN博客_vuecli图形化界面

    2.安装svg-sprite-loader

    npm install svg-sprite-loader -D

    3.配置svg-sprite-loader

    1.新建存放svg图标的目录

    在项目 src 目录下新建 src/icons/svg 目录(存放 svg 图标文件)。

    2.创建svg文件的入口文件

    在 src/icons 下创建 icons 目录的入口文件 index.js ,负责svg文件的加载

    1. import Vue from 'vue'
    2. import SvgIcon from '@/components/SvgIcon'
    3. Vue.component('svg-icon', SvgIcon)
    4. /**
    5. * require.context 的参数说明
    6. * './svg' 代表要查找的文件路径
    7. * false 代表是否查找子目录
    8. * /\.svg$/ 代表要匹配文件的正则
    9. *
    10. */
    11. const svg = require.context('./svg', false, /\.svg$/)
    12. const requireAll = (requireContext) =>
    13. requireContext.keys().map(requireContext)
    14. requireAll(svg)

    3.配置vue.config.js

    在vue.config.js中添加如下配置:

    1. 'use strict'
    2. const path = require('path')
    3. const resolve = dir => path.join(__dirname, dir)
    4. module.exports = {
    5. chainWebpack (config) {
    6. // 配置 svg-sprite-loader
    7. config.module
    8. .rule('svg')
    9. .exclude.add(resolve('src/icons'))
    10. .end()
    11. config.module
    12. .rule('icons')
    13. .test(/\.svg$/)
    14. .include.add(resolve('src/icons'))
    15. .end()
    16. .use('svg-sprite-loader')
    17. .loader('svg-sprite-loader')
    18. .options({
    19. symbolId: 'icon-[name]'
    20. })
    21. .end()
    22. }
    23. }

    4.创建图标组件:SvgIcon.vue

    在src/components下创建SvgIcon.vue

    (或者:在src/components下创建SvgIcon文件夹,在里边创建index.vue)

    内容如下:

    1. <template>
    2. <svg className="svg-icon" aria-hidden="true">
    3. <use :xlink:href="iconName"/>
    4. svg>
    5. template>
    6. <style>
    7. .svg-icon {
    8. width: 1.5em;
    9. height: 1.5em;
    10. }
    11. style>
    12. <script>
    13. export default {
    14. props: {
    15. iconClass: {
    16. type: String,
    17. required: true
    18. }
    19. },
    20. computed: {
    21. iconName () {
    22. return `#icon-${this.iconClass}`
    23. }
    24. }
    25. }
    26. script>

    5.使用SvgIcon组件

    1.全局引入icons

    在 main.js 入口文件中 全局引入 icons:

    import './icons'

    2.下载svg文件

            去 iconfont 图标网站下载个svg图标。

            将下载的 svg 图标放置到 src/icons/svg 目录下。这里我下载的是一个搜索图标。

    3.在组件中引入svg图标

    新建components/Parent.vue

    1. <template>
    2. <div>
    3. <div>
    4. 这是Parent。
    5. div>
    6. <svg-icon icon-class="search">svg-icon>
    7. div>
    8. template>
    9. <script>
    10. export default {
    11. name: 'Parent'
    12. }
    13. script>
    14. <style scoped>
    15. style>

    修改router/index.js

    1. import Vue from 'vue'
    2. import VueRouter from 'vue-router'
    3. import Parent from '../components/Parent'
    4. Vue.use(VueRouter)
    5. const routes = [
    6. {
    7. path: '/',
    8. name: 'Parent',
    9. component: Parent
    10. }
    11. ]
    12. const router = new VueRouter({
    13. routes
    14. })
    15. export default router

    6.测试

    访问:http://localhost:8080/#/

    结果:

    7.压缩svg图标(非必须)

            我们从iconfont下载的svg图标已经比较精简了,但里边还是有些无用信息(比如注释)。而且,如果svg图标是从设计那里拿到的,可能会不够精简,这时可以使用svgo来进行压缩。

    见:SVGO--使用/实例_IT利刃出鞘的博客-CSDN博客

    其他网址

    SVG 使用教程:如何在 Vue 中使用 SVG icon 图标系统 - 卡拉云

    Svg Icon 图标 | vue-element-admin

    手摸手,带你优雅的使用 icon - 掘金

  • 相关阅读:
    矩阵存储和特殊矩阵的压缩存储
    SQL按年月创建动态表
    【C++】map & set
    (一)实现一个简易版IoC容器【手撸Spring】
    查找算法【二叉查找树】 - 原理
    PDF文件在线预览
    分布式监控系统——Zabbix(3)配置
    02 powershell服务器远程执行命令
    windows docker 及 k8s 环境搭建
    天津市行政村边界数据/乡镇街道边界数据/行政区划边界分布
  • 原文地址:https://blog.csdn.net/feiying0canglang/article/details/126394999