vue3 + vite项目使用SVG图标

vue3使用svg(无废话版) vue3使用svg 阅读详情

我们在开发一个项目时常会用到一些图标,有些图标在有限的图标库中却是没有,因此少数的图标需要我们去网上查找,或是自定义一些专用的图标。一般很少有图标库满足现实的项目开发,这时将推荐使用 iconify 这个图标库,几乎包含我们常见全部的图标,使用也非常简单。废话不多说咱们开始真刀实战。

引入vite插件

  • unplugin-icons
  • unplugin-vue-components
  • vite-plugin-svg-icons
  • @iconify/json
  • @iconify/vue
# npm

npm i -D @iconify/json @iconify/vue unplugin-icons vite-plugin-svg-icons unplugin-vue-components

#yarn

yarn add -D @iconify/json @iconify/vue unplugin-icons vite-plugin-svg-icons unplugin-vue-components

#pnpm

pnpm add -D @iconify/json @iconify/vue unplugin-icons vite-plugin-svg-icons unplugin-vue-components

使用方式

第一种:unplugin-icons

配置vite插件:

 // 配置图标- unplugin-icons
Icons({
    compiler: "vue3",
    customCollections: {
       ["local"]: FileSystemIconLoader(LOCAL_PATH, (svg: string) =>
               svg.replace(/^<svg\s/, '<svg width="1em" height="1em" '))
       },
    scale: 1,
    autoInstall: true,
    defaultClass: "inline-block"
}),
// 配置unplugin-vue-components
Components({
    resolvers: [
        IconsResolver({
           prefix: "icon",
           customCollections: COLLECTION_NAME,
        }),
    ],
}),
  1. 使用iconify图标作为载体显示:
<!--  使用图标  -->
<icon-ep-bicycle style="font-size: 30px;color: #0C0C0C;background-color: #efafaf"></icon-ep-bicycle>

效果:

图标解释:

icon 为我们自定义的前缀

ep-bicycle 为图标的名字,可以去iconify查询,将冒号 :更换横杠 - 。

        2. 使用本地svg图标作为载体显示

下载svg图标文件,放在项目的 src/assets/icons/svg 目录下

<!--  使用图标  -->
<icon-local-acrobat class="icons"></icon-local-acrobat>
<icon-local-control-center class="icons"></icon-local-control-center>
<icon-local-setting class="icons"></icon-local-setting>

效果:

图标的样式部分可自行调整,演示的样式是我自定义的

图标解释:

icon-local-acrobat

icon 为我们自定义的前缀

local 为我们自定义的集合容器名,在配置vite时指定的

acrobat 为图标文件的名字

第二种:vite-plugin-svg-icons

配置vite插件

// 配置图标- vite-plugin-svg-icons
createSvgIconsPlugin({
    // 指定需要缓存的图标文件夹
    iconDirs: [LOCAL_PATH],
    // 指定symbolId格式
    symbolId: `icon-[dir]-[name]`,
    inject: "body-last",
    customDomId: "__SVG_ICON_LOCAL__",
})

在main.ts中引入样式

import "virtual:svg-icons-register";

自定义SvgIcon组件方便图标的使用,这里我使用的是jsx的形式定义的组件,用vue定义的组件可以自行参照下面的形式写即可。

import type {CSSProperties, PropType} from "vue";
import {computed, defineComponent} from "vue";
import {Icon} from "@iconify/vue";

// horizontal: 水平翻转 ,vertical:垂直翻转
type FlipType = "horizontal" | "vertical";
// 数字代表旋转角度  0° 90° 180° 270°
type RotateType = 0 | 1 | 2 | 3;

/**
 * SvgIcon 组件
 * @date 2023/9/26
 */
export default defineComponent({
    name: "SvgIcon",
    props: {
        // 图标名字
        icon: {
            type: String,
            required: true,
            default: "",
        },
        // 是否为本地 svg 图标
        isLocal: {
            type: Boolean,
            default: false,
        },
        // 图标大小
        size: {
            type: [Number, String],
            default: 14,
        },
        // 旋转角度
        rotate: {
            type: Number as PropType<RotateType>,
            default: 0,
        },
        // 图标翻转(水平翻转、垂直翻转)
        flip: String as PropType<FlipType>,
        // 图标旋转动画效果
        spin: {
            type: Boolean,
            default: false,
        },
        // 单独图标样式
        iconStyle: Object as PropType<CSSProperties>,
        // 图标颜色
        color: String,
        // 点击图标触发事件
        onClick: Function as PropType<(e: MouseEvent) => void>,
    },
    setup(props, {attrs}) {
        const bindAttrs = computed<{ class: string; style: string }>(() => ({
            class: (attrs.class as string) || "",
            style: (attrs.style as string) || "",
        }));

        const symbolId = () => `#icon-${props.icon}`;

        const rotate = [0, 90, 180, 270];

        const localIconStyle = {
            width: "1em",
            height: "1em",
            lineHeight: "1em",
            fontSize: `${`${props.size}`.replace("px", "")}px`,
            animation: props.spin ? "circle 3s infinite linear" : "",
            transform: (() => {
                const scale = props.flip
                    ? props.flip == "vertical"
                        ? "scaleY(-1)"
                        : props.flip == "horizontal"
                            ? "scaleX(-1)"
                            : ""
                    : "";
                return `rotate(${rotate[props.rotate]}deg) ${scale}`;
            })(),
        };

        const iconStyles = {outline: "none", animation: props.spin ? "circle 3s infinite linear" : ""};
        return () => (
            <b
                onClick={e => {
                    props.onClick?.(e);
                }}
                class={["inline-block", bindAttrs.value.class, props.onClick ? "cursor-pointer" : ""]}
                style={bindAttrs.value.style}
            >
                {props.isLocal ? (
                    <svg aria-hidden="true"
                         style={props.iconStyle ? Object.assign(localIconStyle, props.iconStyle) : localIconStyle}>
                        <use xlinkHref={symbolId()} fill="currentColor"/>
                    </svg>
                ) : (
                    <Icon
                        icon={props.icon}
                        width={props.size}
                        height={props.size}
                        rotate={props.rotate}
                        flip={props.flip}
                        color={props.color}
                        style={props.iconStyle ? Object.assign(iconStyles, props.iconStyle) : iconStyles}
                    />
                )}
            </b>
        );
    },
});

使用iconify图标

<!--  使用图标  -->
<SvgIcon icon="ep:avatar" size="50" color="#000"></SvgIcon>

使用本地图标

<!--  使用图标  -->
<SvgIcon icon="setting" size="50" is-local class="icons"></SvgIcon>

区别是使用本地svg图标时需要 isLocal 设置为true,其他的属性可自行摸索,在组件中也有相应的代码注释

完整代码

vite配置:

import {fileURLToPath, URL} from 'node:url'

import {defineConfig} from 'vite'
import path from "path";
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import Icons from "unplugin-icons/vite";
import {FileSystemIconLoader} from "unplugin-icons/loaders";
import {createSvgIconsPlugin} from "vite-plugin-svg-icons";
import Components from "unplugin-vue-components/vite";
import IconsResolver from 'unplugin-icons/resolver';

/**
 * 获取项目根路径
 * @descrition 末尾不带斜杠
 */
export function getRootPath() {
    return path.resolve(process.cwd());
}

/**
 * 获取项目src路径
 * @param srcName - src目录名称(默认: "src")
 * @descrition 末尾不带斜杠
 */
export function getSrcPath(srcName = "src") {
    const rootPath = getRootPath();
    return `${rootPath}/${srcName}`;
}

const LOCAL_PATH = `${getSrcPath()}/assets/icons/svg`
const COLLECTION_NAME = "local"

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        vueJsx(),
        // 配置unplugin-vue-components
        Components({
            resolvers: [
                IconsResolver({
                    prefix: "icon",
                    customCollections: COLLECTION_NAME,
                }),
            ],
        }),
        // 配置图标- unplugin-icons
        Icons({
            compiler: "vue3",
            customCollections: {
                [COLLECTION_NAME]: FileSystemIconLoader(LOCAL_PATH, (svg: string) =>
                    svg.replace(/^<svg\s/, '<svg width="1em" height="1em" '),
                ),
            },
            scale: 1,
            autoInstall: true,
            defaultClass: "inline-block",
        }),
        // 配置图标- vite-plugin-svg-icons
        createSvgIconsPlugin({
            // 指定需要缓存的图标文件夹
            iconDirs: [LOCAL_PATH],
            // 指定symbolId格式
            symbolId: `icon-[dir]-[name]`,
            inject: "body-last",
            customDomId: "__SVG_ICON_LOCAL__",
        })
    ],
    resolve: {
        alias: {
            '@':
                fileURLToPath(new URL('./src', import.meta.url))
        }
    }
})

SvgIcon组件:

import type {CSSProperties, PropType} from "vue";
import {computed, defineComponent} from "vue";
import {Icon} from "@iconify/vue";

// horizontal: 水平翻转 ,vertical:垂直翻转
type FlipType = "horizontal" | "vertical";
// 数字代表旋转角度  0° 90° 180° 270°
type RotateType = 0 | 1 | 2 | 3;

/**
 * SvgIcon 组件
 * @date 2023/9/26
 */
export default defineComponent({
    name: "SvgIcon",
    props: {
        // 图标名字
        icon: {
            type: String,
            required: true,
            default: "",
        },
        // 是否为本地 svg 图标
        isLocal: {
            type: Boolean,
            default: false,
        },
        // 图标大小
        size: {
            type: [Number, String],
            default: 14,
        },
        // 旋转角度
        rotate: {
            type: Number as PropType<RotateType>,
            default: 0,
        },
        // 图标翻转(水平翻转、垂直翻转)
        flip: String as PropType<FlipType>,
        // 图标旋转动画效果
        spin: {
            type: Boolean,
            default: false,
        },
        // 单独图标样式
        iconStyle: Object as PropType<CSSProperties>,
        // 图标颜色
        color: {
            type: String,
            default: "#000",
        },
        // 点击图标触发事件
        onClick: Function as PropType<(e: MouseEvent) => void>,
    },
    setup(props, {attrs}) {
        const bindAttrs = computed<{ class: string; style: string }>(() => ({
            class: (attrs.class as string) || "",
            style: (attrs.style as string) || "",
        }));

        const symbolId = () => `#icon-${props.icon}`;

        const rotate = [0, 90, 180, 270];

        const localIconStyle = {
            width: "1em",
            height: "1em",
            lineHeight: "1em",
            fontSize: `${`${props.size}`.replace("px", "")}px`,
            animation: props.spin ? "circle 3s infinite linear" : "",
            transform: (() => {
                const scale = props.flip
                    ? props.flip == "vertical"
                        ? "scaleY(-1)"
                        : props.flip == "horizontal"
                            ? "scaleX(-1)"
                            : ""
                    : "";
                return `rotate(${rotate[props.rotate]}deg) ${scale}`;
            })(),
        };

        const iconStyles = {outline: "none", animation: props.spin ? "circle 3s infinite linear" : ""};
        return () => (
            <b
                onClick={e => {
                    props.onClick?.(e);
                }}
                class={["inline-block", bindAttrs.value.class, props.onClick ? "cursor-pointer" : ""]}
                style={bindAttrs.value.style}
            >
                {props.isLocal ? (
                    <svg aria-hidden="true"
                         style={props.iconStyle ? Object.assign(localIconStyle, props.iconStyle) : localIconStyle}>
                        <use xlinkHref={symbolId()} fill="currentColor"/>
                    </svg>
                ) : (
                    <Icon
                        icon={props.icon}
                        width={props.size}
                        height={props.size}
                        rotate={props.rotate}
                        flip={props.flip}
                        color={props.color}
                        style={props.iconStyle ? Object.assign(iconStyles, props.iconStyle) : iconStyles}
                    />
                )}
            </b>
        );
    },
});

main.ts 引入

import "virtual:svg-icons-register";

使用:

<script setup lang="ts">
import SvgIcon from "@/components/SvgIcon";
</script>

<template>
  <main style="display: flex;flex-direction: column">
    <!--  使用图标  -->
    <icon-ep-bicycle class="icons"></icon-ep-bicycle>

    <!--  使用图标  -->
    <icon-local-acrobat class="icons"></icon-local-acrobat>
    <icon-local-control-center class="icons"></icon-local-control-center>
    <icon-local-setting class="icons"></icon-local-setting>


    <!--  使用图标  -->
    <SvgIcon icon="ep:avatar" size="50"></SvgIcon>

    <!--  使用图标  -->
    <SvgIcon icon="setting" size="50" is-local class="icons"></SvgIcon>
  </main>
</template>

<style scoped>
.icons {
  font-size: 30px;
  color: #0C0C0C;
  background-color: #efafaf;
  margin: 20px;
}
</style>

vue3+vite:封装Svg组件 vite-plugin-svg-icons 是一个 Vite 插件,用于在 Vite 2 项目中方便地使用 SVG 图标。它可以自动将 SVG 图标文件转换为 Vue 组件,并且提供了一些配置选项来自定义生成的组件。 阅读详情

相关推荐

vite vue3 ts 全局封装自定义svg组件,全局引入

8.因为项目使用svg组件频率很高,所以将svg组件注册成全局组件,新建service/globalComponent/index.ts。6.为了更好地复用,接下来将svg封装成一个全局组件,以后使用更加方便,新建component/svgicons/index.vue。4.使用vite-plugin-svg-icons插件还需要fast-glob依赖。1.安装vite-plugin-svg-icons插件。2.配置vite.config.ts文件,配置插件。7.使用svgicon组件。

胡一可 1164

vue中如何引入自动引入所有svg图标

一.前提 1.要使用 svg 先安装对应的 loader npm install svg-sprite-loader 注意: 如果按照下面配置正确发现svg依然无法显示可能s’v’g-sprite-loader的版本过高,重新指定版本下载npm i svg-sprite-loader@3.8.0 --save-dev, 就可能正确显示svg。(vue3.0应该是没有这个问题的) 2.webpack.base.conf.js修改 { test: /\.svg$/, load

口袋的天空的博客 2827

vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇

在一文整合了,并将中提供的图标进行全局注册,这样可以很方便的延续Element UI的风格 —— 通过)。在真实的企业级开发中,内置的图标通常很难满足业务需求,项目中需要引入大量的 SVG 图标资源,本文描述如何在 Vue3 + Vite2 环境中使用 SVG 图标,封装一个支持本地 SVG 图标和在线 SVG 图标的组件。文中实现的组件会内置到脚手架中(通过yyg命令行创建的项目内置该组件),如果在此之前已经通过 yyg-cli 创建了项目,可以按照本文的步骤封装 SVG 图标组件。

youyacoder的博客 1367

Vue3中使用svg图标

【代码】Vue3中使用svg图标。

LQlove1的博客 3591

Vue3 + Vite项目图标方案深度对比:Element Plus自带、Iconify自动导入、本地SVG组件,到底怎么选?

本文深入对比了Vue3 + Vite项目中的三种图标方案:Element Plus自带图标、Iconify自动导入和本地SVG组件。通过分析构建体积、开发体验和性能优化等关键维度,帮助开发者根据项目需求选择最适合的图标解决方案,提升开发效率和项目性能。

weixin_30542979的博客 327

C51:PWM+舵机角度控制

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.脉冲宽度调制通过占空比编码模拟信号一个周期内,高电平占据时长的百分比如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。

qq_73379310的博客 3388

Vue3+vite项目 引入svg图标并使用(封装svg组件)

Vue3+vite项目 引入svg图标并使用(封装svg组件)

蓝胖子的博客 1673

斗罗大陆叙事体系与战斗系统设计解析

在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典

weixin_29291069的博客 249

vue3+vite项目中封装并使用svg图标

vue3+vite项目中封装并使用svg图标。项目中有很多地方需要用到svg图标,Element Plus 组件库提供了一套常用的图标,但是往往不能满足需求,而网上比较全的就是阿里图标库,本文就来介绍下如何将阿里图标库中的svg引入到自己的项目中。本文的项目使用vue3+vite来构建,可以使用第三方的vite-plugin-svg-icons插件,来引入svg图标。

~~~ 3774

YOLOv10注意力革新:小波域注意力(WDA)如何实现多尺度特征精准聚焦

本文深入解析YOLOv10中的小波域注意力(WDA)机制,探讨其如何通过频域分解与动态聚焦实现多尺度特征精准提取。WDA模块结合离散小波变换与注意力机制,显著提升小目标检测性能,在VisDrone数据集上AP提升达12.6%。文章详细介绍了两种集成方案及代码实现,为计算机视觉开发者提供实用指南。

weixin_29079671的博客 250

python实现序列比对之Needleman-wunsch算法 (附完整源码)

python实现序列比对之Needleman-wunsch算法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 459

Vue3+Vite+Typescript项目使用SVG图标

前端项目经常需要使用svg图标,但是又较难像图片文件一样管理,所以可以考虑使用svg加载器(Vite项目中使用的是)来解决这个问题。

m0_43395703的博客 489

医疗工具识别(手术器械计数):基于YOLOv8的智能手术器械管理系统

YOLOv8是Ultralytics公司于2023年推出的最新一代目标检测算法,相比前代YOLOv5,在精度和速度上都有显著提升。Anchor-free检测:不再使用预定义的anchor boxes,简化了检测流程更高效的骨干网络:采用CSPDarknet53作为特征提取网络多尺度特征融合:通过PANet结构实现更好的小目标检测损失函数优化:使用CIoU损失提高边界框回归精度YOLOv8提供了多种规模的模型(n/s/m/l/x),可根据实际需求在精度和速度之间进行权衡。

YOLO 480

vite构建的vue3项目中如何使用svg图标?

2、配置插件: 在 vite.config.ts中配置 createSvgIconsPlugin。存放文件路径 :src/assets/svg。3、封装成组件:SvgIcon.vue。

deng_zhihao692817的专栏 493

加密算法:深度解析Ed25519原理

在 Solana 开发过程中,我一直对 Ed25519 加密算法 如何生成公钥、签名以及验证签名的机制感到困惑。为了弄清这一点,我查阅了大量相关资料,终于对其流程有了更清晰的理解。在此记录实现过程,方便日后查阅。

盹猫的博客 1万+

【软件系统架构】系列四:嵌入式技术

嵌入式系统是以应用为中心、以计算机技术为基础,并将可配置与可裁剪的软硬件集成于一体的专用计算机系统。它需要满足功能、可靠性、成本、体积、功耗等方面的严格要求。 嵌入式系统一般由以下组成部分构成:

moton2017的博客 997

在vite+Vue3项目中使用 自定义svg 图标,借助vite-plugin-svg-icons 封装SvgIcon组件

本文介绍了在Vue3项目中通过vite-plugin-svg-icons插件实现SVG图标组件的方法。首先安装插件并配置vite.config.ts,指定图标目录和命名规则。然后在main.ts中引入虚拟模块注册。核心部分是封装可复用的SvgIcon组件,支持动态图标名称、自定义大小颜色等属性。最后演示了按需引入和全局注册两种使用方式。该方案实现了SVG图标的灵活管理和高效使用,适用于需要大量自定义图标的Vue3项目。

Angel_Tears_的博客 1069

骑砍Ⅱ霸主MOD开发(5)-2D界面

本文介绍了2D界面开发的技术框架,主要包括以下内容: 2D界面架构:由多个GauntletLayer(菜单/对话框/定制页面)和SceneLayer(3D页面)组成,支持屏幕切换和管理。 GauntletLayer实现:采用Movie(HTML页面)+ViewModel(动态数据)模式,支持优先级管理、焦点控制和事件响应。 2D控件系统:包括颜色字体、坐标布局、背景图(Sprite/Texture)等配置方式,支持自定义控件开发。 定制化页面开发:详细说明了游戏菜单和对话框的实现方法,包括状态管理、事件回调

骑砍战团&霸主MOD开发 1181

vue3+ts+vite 项目引入svg icon图标

注意文件路径要与vite.config.ts中 iconDirs: [path.resolve(process.cwd(), "src/assets/icons")]保持一致。如果修改fill图标颜色失效,打开对应的.svg文件 找到`fill="#d4237a"`将其删除即可。4、在项目文件夹src/assets/icons文件夹下添加.svg图标文件,svg我们可以在。1、安装`vite-plugin-svg-icons`2、配置vite.config.ts。3、修改main.ts文件。

qq_38902432的博客 861

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Vue3项目中使用vite插件自制svg图标

在vite中自制图标很简单使用vite插件自制svg图标的大致思路是:使用vite-plugin-svg-icons插件管理和注册图标,去iconfont下载svg图标,再封装一个SvgIcon组件,最后在页面中使用这个组件。

m0_72642362的博客 316

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

别再手动导入了!Vue3 + Vite项目里,用vite-plugin-svg-icons一键搞定SVG图标库

本文介绍如何在Vue3 + Vite项目中利用vite-plugin-svg-icons插件实现SVG图标的自动化管理,解决传统手动导入的低效问题。通过工程化方案,开发者可以批量扫描目录、按需加载图标,并实现统一的样式控制,显著提升开发效率和维护体验。

weixin_33701251的博客 146

九、vue3+vite项目中配置SVG图标

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源,这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多,放在项目中几乎不占用资源。

blue_121的博客 2313

vue3+vite项目中使用阿里图标库(svg)图标

前端项目中有很多地方会用到小图标,阿里的 iconfont 是一个不错的选择,同时, 它上面的 svg 矢量图标占用资源更少加载更快是一个不错的选择, 下面我们就来说一说,项目中如何来使用 svg 图标。

hjh15827475896的博客 1134

vite+vue3项目中svg图标组件封装

如果svg图标设置颜色值不生效,点击 svg文件 查看源码,修改 fill 属性值为 fill=“currentColor”或者 fill=""。

qq_31594665的博客 887

vue3+vite 项目中修改SVG格式图标颜色,一张多用

svg格式图标变成通用

... 948

vue项目使用svg图标

下面是在 Vue 3 项目中完整引入和使用的步骤。

Angel_girl319的博客 1520
上一篇: vue3 + typescript + vite + naive ui + tailwindcss + jsx 仿苹果桌面系统
下一篇: 让Erupt框架支持.vue文件做自定义页面模版
shareloke
博客等级 码龄10年 4741粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值