美文网首页
Vue3-封装使用SVG

Vue3-封装使用SVG

作者: 江南永保春 | 来源:发表于2023-01-03 08:57 被阅读0次

前期准备工作

  1. 下载需要的SVG图标
  2. 初始化项目(笔者文档结构如下)


    image.png

相关文件

  1. index.js
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component 

// register globally
Vue.component('svg-icon', SvgIcon)

const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

  1. svgo.yml
# replace default config

# multipass: true
# full: true

plugins:

  # - name
  #
  # or:
  # - name: false
  # - name: true
  #
  # or:
  # - name:
  #     param1: 1
  #     param2: 2

- removeAttrs:
    attrs:
      - 'fill'
      - 'fill-rule'
  1. SvgIcon


    image.png
<template>
  <svg :class="svgClass" aria-hidden="true" v-on="$listeners" height="15" width="15">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>


export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
      }
    }
  }
}
</script>

<style scoped>
.svg-icon {
  /* width: 1em;
  height: 1em; */
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover!important;
  display: inline-block;
}
</style>
  1. package.json 同级的 vue.config.js文件 如果没有新建vue.config.js
const { defineConfig } = require("@vue/cli-service");
const path = require("path");

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = defineConfig({
  chainWebpack: (config) => {
    config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(resolve("src/assets/icons/svg"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      })
      .end();
  },
});
  1. 使用:
  把svg图标放到 assets/icons/svg 文件夹里面 图标文件名 就是 所需要的类名
  <svg-icon icon-class="money" class-name="money-icon" />
   "class-name" 就是普通的 .类名称 { 样式 }

相关文章

  • vue-cli3使用svg的最佳实践

    目录 iconfont的三种使用方式及其优缺点 封装svg组件 svg雪碧图 自动导入svg图标 封装svg组件 ...

  • Android图片之svg

    1.SVG是什么2.SVG优点3.SVG使用4.获取SVG5.封装使用6.SVG动画 1.SVG是什么? SVG(...

  • 封装svg组件

    svg图标的使用基于这次项目的图标使用本地的svg图片。普通的使用方式 避免每次写这三行代码,封装一个svg组件 ...

  • vite+vue3.0+ts配置单个使用svg图标

    1、安装 2、在vite.config.ts中 3、封装一个svg组件 4、使用 ①、使用时,如果想按需引入 ②、...

  • Vue中使用SVG封装成SVG组件

    一、在vue脚手架生成的文件夹下的src/components创建一个Svg 二、使用和安装svg-sprite ...

  • 【iOS】加载SVG图片

    一、导入 SVGKit 第三方库 二、使用 SVGKit 库 新建 UIImage+SVG 分类,二次封装SVGK...

  • AI导出svg图片位置改变

    在AI中导出svg格式时,使用存储为svg,不使用导出为svg(注:导出为svg会使图片出现位置改变等)

  • 项目使用svg图标

    vue-element-admin基础模板中,已经封装好了使用svg图标的组件,此组件在vue-ssr项目中也同样...

  • svg图标封装

    PS:注意如果在iconfont上下载的SVG图标,请把fill="#ffffff"清除掉,不然自定义样式无法作用...

  • svg组件封装

    svg图片的优点 1,任意放缩。 用户可以任意缩放图像显示,而不会破坏图像的清晰度、细节等。2,文本独立。 SVG...

网友评论

      本文标题:Vue3-封装使用SVG

      本文链接:https://www.haomeiwen.com/subject/shtlcdtx.html