Vue项目使用svg图标实践

Vue项目使用SVG图标实践

本文主要介绍在Vue项目中如何使用SVG图标,并提供两个示例说明。

集成SVG图标

  • 安装svg-sprite-loader

svg-sprite-loader将svg文件打包成单个svg sprite,该svg sprite可以通过样式或相关API的方式在您的应用程序中使用。

npm install svg-sprite-loader --save-dev
  • 配置webpack

在 webpack.config.js 添加如下代码:

module.exports = {
  module: {
    rules: [
      {
        test: /\.svg$/,
        loader: 'svg-sprite-loader',
        options: {
          // 配置svg-sprite-loader
          symbolId: 'icon-[name]',
        },
      },
    ],
  },
};

添加完毕后,打开 .vue 文件,使用以下代码导入并使用svg图标。

<template>
  <div>
    <svg class="icon">
      <use xlink:href="#icon-svg"></use>
    </svg>
  </div>
</template>

<script>
export default {
  name: 'svg-icon',
  props: {
    iconClass: {
      type: String,
    },
  },
};
</script>

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

示例

示例一:使用已有的svg图片

在项目中使用已经存在的SVG图片,此示例使用的SVG图标在public文件夹的img目录中。

  • 项目结构
|-- public
    |-- img
        |-- icon.svg
|-- src
    |-- views
        |-- Home.vue
  • Home.vue 文件
<template>
  <div class="home">
    <svg-icon class="heart-icon" icon-class="heart"></svg-icon>
  </div>
</template>

<script>
import SvgIcon from "@/components/SvgIcon.vue";

export default {
  components: {
    SvgIcon,
  },
};
</script>

<style scoped>
.heart-icon {
  width: 30px;
  height: 30px;
}
</style>
  • SvgIcon.vue 文件
<template>
  <svg class="svg-icon" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="`#icon-${iconClass}`" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  • webpack.config.js 文件
const path = require("path");

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

module.exports = {
  chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.exclude.add(resolve("src/icons"));
    svgRule.include.add(resolve("public/img"));
    svgRule
      .test(/\.svg$/)
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });
  },
};

示例二:自定义SVG图标

使用iconfont自定义图标,步骤如下:

  1. 登录 iconfont
  2. 新建项目,并添加图标
  3. 在项目中下载SVG文件

  4. 项目结构

|-- src
    |-- icons
        |-- svg
            |-- custom-svg.svg
    |-- views
        |-- Home.vue
  • custom-svg.svg

上传至icons/svg文件夹中,该文件将被作为自定义SVG图标文件。

  • Home.vue 文件
<template>
  <div class="home">
    <svg-icon class="phone-icon" icon-class="custom-svg"></svg-icon>
  </div>
</template>

<script>
import SvgIcon from "@/components/SvgIcon.vue";

export default {
  components: {
    SvgIcon,
  },
};
</script>

<style scoped>
.phone-icon {
  width: 30px;
  height: 30px;
}
</style>
  • SvgIcon.vue 文件
<template>
  <svg class="svg-icon" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="`#icon-${iconClass}`" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  • webpack.config.js 文件

vue.config.js中,添加如下代码:

module.exports = {
  chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.exclude.add(resolve("src/icons/svg"));
    svgRule.include.add(resolve("src/icons/svg"));
    svgRule
      .test(/\.svg$/)
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });
  },
};

总结

使用SVG图标,可以使网站在任何分辨率下都拥有出色的图形,而且不会失帧或失去其矢量几何图形。本文介绍了在Vue项目中集成SVG图标的步骤,并提供了两个示例,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue项目使用svg图标实践 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 关于Vue脚手架中render 理解

    理解 Vue 脚手架中 render 函数是非常重要的,因为它是 Vue 中组件渲染的核心。render 函数的基本作用是通过调用 createElement 函数来创建虚拟 DOM,然后将这些虚拟 DOM 渲染到浏览器中。 在 Vue 脚手架中,render 函数可以用来替代 template 和 el 选项,使用 render 函数编写组件更加灵活,同时…

    Vue 2023年5月28日
    00
  • Vue零基础入门之模板语法与数据绑定及Object.defineProperty方法详解

    下面是“Vue零基础入门之模板语法与数据绑定及Object.defineProperty方法详解”的完整攻略。 一、模板语法及数据绑定 1.1 插值 Vue框架可以在HTML标签中使用插值语法,通过{{expression}}在模板中绑定数据。Expression通常是JavaScript表达式或变量,可以计算出一个值,并在绑定时进行渲染。例如: <d…

    Vue 2023年5月27日
    00
  • vuex存储数据的几种方法实例详解

    我为您详细讲解“Vuex存储数据的几种方法实例详解”的攻略。 什么是Vuex Vuex是Vue.js应用程序中的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 组件中存储数据的问题 在Vue.js应用程序中,对于一个组件来说,如果它的状态发生变化,这个变化对于其他组件是不可见的;如果多个组件共享同一…

    Vue 2023年5月28日
    00
  • Vue之监听方法案例详解

    那么接下来我来详细讲解“Vue之监听方法案例详解”的完整攻略,包含以下几个方面的内容: 什么是监听方法 在Vue中,监听方法指的是在Vue实例中,通过使用watch属性或$watch方法来监测某些值的变化。当监测到这些值发生变化时,可以执行一些指定的操作。 何时使用监听方法 在开发过程中,经常需要实时监测某些变量或属性的值的变化,来做出对应的响应。比如,当数…

    Vue 2023年5月28日
    00
  • 分分钟玩转Vue.js组件(二)

    让我来详细讲解一下“分分钟玩转Vue.js组件(二)”的完整攻略。 简介 Vue.js 是一款非常流行的 JavaScript 库,用于构建用户界面。Vue.js 具有简单易学、轻量灵活、响应式渲染及组件化等特点, 非常适合构建现代化的 Web 应用程序。 本篇文章将带大家深入了解 Vue.js 中的组件化,在掌握基本概念后,教你如何使用 Vue.js 构建…

    Vue 2023年5月27日
    00
  • Vue实现active点击切换方法

    Vue实现active点击切换的方法有很多种,这里介绍其中的两种: 方法一:使用v-bind:class 在data中定义一个变量isActive,并设置初始值为false <script> export default { data() { return { isActive: false } } } </script> 2.通过v…

    Vue 2023年5月29日
    00
  • Vue之文件加载执行全流程

    当浏览器加载Vue文件时,需要经过文件加载、解释和执行的过程,以下是Vue之文件加载执行全流程的攻略: 文件加载 首先,浏览器会从服务器端请求Vue文件。如果该Vue文件在浏览器缓存中已经存在,则浏览器直接从缓存中读取该文件,否则,浏览器会向服务器端请求该文件。 当Web服务器收到浏览器的Vue文件请求后,会将该文件返回给浏览器。浏览器接收到Vue文件后,会…

    Vue 2023年5月27日
    00
  • vue实现简单转盘抽奖功能

    下面我来详细讲解如何用vue实现简单转盘抽奖功能的完整攻略: 1. 搭建项目 首先我们需要使用vue-cli来搭建一个vue项目,输入以下命令来创建一个新的vue项目: vue create lottery 安装依赖,进入项目目录并启动本地服务器: cd lottery npm install npm run serve 2. 编写转盘组件 接下来我们需要编…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部