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

如何在Vue+ElementUI项目中使用iconfont图标库

如何在Vue+ElementUI项目中使用iconfont图标库

  • 1.简介
  • 2.下载iconfont中的图标
    • 2.1 首先打开iconfont官网
    • 2.2 下载SVG格式的图标,并且将他保存在购物车中
    • 2.3 点击最右边的那个购物车
    • 2.4 下载代码,解压得到
  • 3.打开Vue项目,将下载的图标保存到Vue项目中
    • 3.1 将下载的iconfont.js保存
    • 3.2 获取他的icon名称
    • 3.3 在main.js 中添加
  • 4.前端代码
  • 5.展示

1.简介

iconfont官网
iconfont中有许多样式的图标可以给我们使用。

什么是SVG格式?

SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。

2.下载iconfont中的图标

2.1 首先打开iconfont官网

点击icon图标库,在这里面选择自己需要的图标下载
在这里插入图片描述

2.2 下载SVG格式的图标,并且将他保存在购物车中

一定要记住,在下载的时候,将图标放入购物车中
有人肯定疑问为什么需要将他放入购物车中?
留一个伏笔,等会为大家解释
在这里插入图片描述
在这里插入图片描述

2.3 点击最右边的那个购物车

这个里面就是你之前将想要的图标放入购物车中
在这里插入图片描述

2.4 下载代码,解压得到

在这里插入图片描述

3.打开Vue项目,将下载的图标保存到Vue项目中

我自己的话,是将所有的icon图标放在/src/asserts/icon/svg/
可以自己决定放哪
在这里插入图片描述

3.1 将下载的iconfont.js保存

这里面存储的才是真正的svg图标
在这里插入图片描述

3.2 获取他的icon名称

/**
 * 字体图标, 统一使用SVG Sprite矢量图标(http://www.iconfont.cn/)
 *
 * 使用:
 *  1. 在阿里矢量图标站创建一个项目, 并添加图标(这一步非必须, 创建方便项目图标管理)
 *  2-1. 添加icon, 选中新增的icon图标, 复制代码 -> 下载 -> SVG下载 -> 粘贴代码(重命名)
 *  2-2. 添加icons, 下载图标库对应[iconfont.js]文件, 替换项目[./iconfont.js]文件
 *  3. 组件模版中使用 [<icon-svg name="canyin"></icon-svg>]
 *
 * 注意:
 *  1. 通过2-2 添加icons, getNameList方法无法返回对应数据
 */
import Vue from 'vue'
import IconSvg from '@/components/icon-svg'
import './iconfont'

Vue.component('IconSvg', IconSvg)

const svgFiles = require.context('../assets/icons/svg', true, /\.svg$/)
const iconList = svgFiles.keys().map(item => svgFiles(item))
const re = /\/img\/(.*)\.\w+.svg/
export default {
    // 获取图标icon-(*).svg名称列表, 例如[shouye, xitong, zhedie, ...]
    getNameList() {
        return iconList.map(item => {
            return item.match(re)[1]
        })
    }
}

3.3 在main.js 中添加

下载的iconfont.js文件导入到main中

import '@/icons/iconfont'

4.前端代码

<el-form-item label="菜单图标" :label-width="formLabelWidth">
            <el-popover
              v-model="iconListVisible"
              ref="iconListPopover"
              placement="bottom-start"
              trigger="click"
              popper-class="mod-menu__icon-popover"
            >
              <div class="mod-menu__icon-inner">
                <div class="mod-menu__icon-list">
                  <el-button
                    v-for="(item, index) in iconList"
                    :key="index"
                    @click="iconListCurrentChangeHandle(item)"
                    :class="{ 'is-active': dialogForm.icon === item }"
                  >
                    <svg class="icon-svg" aria-hidden="true">
                      <use :xlink:href="`#${item}`"></use>
                    </svg>
                  </el-button>
                </div>
              </div>
            </el-popover>
            <el-input
              v-model="dialogForm.icon"
              v-popover:iconListPopover
              :readonly="true"
              placeholder="菜单图标名称"
              class="icon-list__input"
            ></el-input>
          </el-form-item>

最主要的代码就是:

<el-button
                    v-for="(item, index) in iconList"
                    :key="index"
                    @click="iconListCurrentChangeHandle(item)"
                    :class="{ 'is-active': dialogForm.icon === item }"
                  >
<svg class="icon-svg" aria-hidden="true">
<use :xlink:href="`#${item}`"></use>
</svg>
 </el-button>


<script>
export default {

data() {
	return{
	iconList: [],
	}
},

methods:{
init() {
      this.iconList = Icons.getNameList();
    },
},
mounted() {
    this.init();
  },

}
</script>

样式代码:

.icon-svg {
  width: 1em;
  height: 1em;
  fill: currentColor;
  overflow: hidden;
}

5.展示

在这里插入图片描述

相关文章:

  • Python基础加强学习
  • C语言-简单的程序设计
  • 链队列基本操作
  • 多旋翼无人机仿真 rotors_simulator:基于PID控制器的位置控制---高度控制
  • Python是“真火”还是“虚火”?
  • 为什么要做数据治理以及如何进行数据治理?
  • 那些被渐渐遗忘的python知识点
  • LeetCode16. 最接近的三数之和
  • 外包干了三年,真废了。。。
  • WinLicense 3.1.3.0 Crack
  • 通过Java监听MySQL数据的变化
  • Sam-ba烧录工具的使用教程
  • 基于驾驶训练优化算法的函数寻优算法
  • Linux运维面试题总结—Linux基础、计算机网络基础
  • ARM通用中断控制器GIC之中断处理
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 07.Android之多媒体问题
  • 30天自制操作系统-2
  • angular2 简述
  • angular2开源库收集
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTTP 简介
  • idea + plantuml 画流程图
  • Laravel Telescope:优雅的应用调试工具
  • Node 版本管理
  • Python学习之路13-记分
  • react-native 安卓真机环境搭建
  • 从零搭建Koa2 Server
  • 给第三方使用接口的 URL 签名实现
  • 设计模式走一遍---观察者模式
  • 使用agvtool更改app version/build
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 阿里云服务器购买完整流程
  • ​520就是要宠粉,你的心头书我买单
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #1015 : KMP算法
  • (1) caustics\
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言)共用体union的用法举例
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (五)MySQL的备份及恢复
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)平衡树
  • .apk文件,IIS不支持下载解决
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core使用ef 6
  • .Net Core与存储过程(一)
  • .Net(C#)自定义WinForm控件之小结篇
  • @RequestBody的使用
  • @我的前任是个极品 微博分析
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会