【D3使用教程】(6) 交互操作之事件监听

D3数据可视化基础 D3 总共 提供 了 12 个布 局: 饼状 图( Pie)、 力导 向图 ( Force )、 弦图 (Chord)、树状图(Tree)、集群图(Cluster)、捆图(Bundle)、打包图 (Pack)、直方图(Histogram)、分区图(Partition)、堆栈图(Stack)、矩阵树图 (Treemap)、层级图(Hierarchy)。在布局的应用中,最简单的就是饼状图。(2)还可以直接包含网络的链接,这种方法较简单: 但使用的时候要保持网络连接有效,不能再断网的情况下使用。 阅读详情

在这里插入图片描述

事件监听

在之前的文章中写到,为了让图表具有交互能力,我们必须针对一些事件来编写代码,以便监听某些DOM元素发生的这些事件。

D3中,on()方法对于绑定D3元素集非常方便。

通常情况下,我们会一次性为多个元素绑定事件监听器,所要改变的只是将select()换成选择多个元素的selectAll(),再把选择的元素集交给on()即可。

这里我们以柱状图为例,

svg.selectAll("rect")
   .data(dataset)
   .enter()
   .append("rect")
   .attr({
		x:function(d,i){return i* (w/dataset.length);},
		y:function(d){return h-(d*4);},
		    width: w/dataset.length - barPadding,
		    height: function(d){return d*4;},
		    fill: function(d){return "rgb(0,0,"+(d*10)+")";}
	})
    .on("click",function(d){
       //任何条形被单击,都会执行该代码
        	console.log(d);//点击条形,在控制台查看输出
    });

悬停高亮

简单的悬停高亮使用CSS3就能实现,例如在条形图上悬停高亮:

rect {
	-moz-transition: all .3s;
	 -o-transition:all .3s;
	 -webkit-transition: all .3s;
	 transition: all .3s;
}
rect:hover {
	 fill:orange;
}

但是,既然D3中也能这么做,即绑定mouseover和mouseout事件。你还可以根据上节学到加入过渡效果。

.on("mouseover",function(d){
     d3.select(this) //在传给任何D3方法的匿名函数中,如果想操作当前元素,只要引用this就行
       .transition(300)
       .attr("fill","orange");
   })
       .on("mouseout",function(d){
          d3.select(this)
           	.transition(300)
           	.attr("fill","rgb(0,0,"+(d*10)+")");
  }

但是,你是否注意到,但你将鼠标移到标签上时,不会发生高亮效果。就是说,标签"挡住"了mouseover这个事件的发生。为了不被标签影响,可以给标签(svg text元素)添加规则:

svg text {pointer-event:none;}

或者在D3创建标签的时候设置CSS属性:

svg.selectAll("text")
   .data(dataset)
   .enter()
   .append('text')
   .style("pointer-events","none")  //<---添加的属性
   .text(function(d){
      return d;
  })
   .attr({
      x:function(d,i) {
          return i * (w/dataset.length)+40;
   },
      y:function(d){return h-(d*4)+14;},
         fill:"red",
 });

#排序

仍以条形图为例,给每个条形添加一个click事件监听器,在这个匿名函数中调用我们新定义的一个函数sortBars(),然后利用D3提供的sort()函数进行排序。
这里需要注意的是,单击条形图时,会触发一次过渡,而鼠标悬停又会触发另一次过渡。为了运行鼠标悬停的高亮过渡,原来正在运行的过渡就会中断。所以,为了避免中断,这里的悬停我们使用了CSS3的方式。

var sortBars = function() {
    sortOrder = !sortOrder;
    // 选择所有rect元素,使用D3提供的sort()方法,排序依据是绑定到它们的数据值
      svg.selectAll("rect")
        .sort(function(a,b){
        	 if(sortOrder){
        	   	return d3.ascending(a,b);//比较函数接受来自两个不同元素的数据值,针对数组中每一对元素都被调用一次,然后它比较a和b,知道所有数组元素都按我们指定的规则排序完毕
        	 }else {
        	   	 return d3.descending(a,b);//降序
        	 } 		
      })
        .transition()
        .duration(1000)
        .delay(function(d,i){return i*10;})
        .attr({
		x:function(d,i){return i* (w/dataset.length);},
		y:function(d){return h-(d*4);}
	});
        svg.selectAll("text")
           .sort(function(a,b){
        	 if(sortOrder){
        	   	return d3.ascending(a,b);
        	}else {
        	   return d3.descending(a,b);
        	}
        })
        .transition()
        .duration(1000)
        .delay(function(d,i){return i*10;})
		.attr({
		    x:function(d,i) {
		         return i * (w/dataset.length)+40;
		},
		    y:function(d){return h-(d*4)+14;},
		         fill:"red",
		});
        	   
  };

#提示条
1】 添加title
.append(“title”)
.text(function(d){return d;}) //在添加rect或者其他图形时候添加title,当鼠标悬停在图形上方,自然会有浏览器自带的提示
2】 SVG提示条
利用mouseover()事件监听,动态创建值标签,而在mouseout发生时,将值标签删除。不大推荐该方式。
3】HTML的DIV提示条
类似于SVG,只是它能做的更美观
例如,我们再页面中初始化一个html提示条
:

<div id="tooltip" class="hidden">
	<p><strong>This Value is:</strong></p>
	<p><span id="tooltip_value">100</span></p>
</div>

然后利用d3的mouseover与mouseout对id="tooltip"进行控制。

附完整代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
        div.bar {
            display: inline-block;
            width: 20px;
            height: 75px;
            margin-right: 2px;
            background-color: teal;

        }
        rect {
		  -moz-transition: all .3s;
		  -o-transition:all .3s;
		  -webkit-transition: all .3s;
		  transition: all .3s;
		}
		rect:hover {
		  fill:orange;

		}
		#tooltip {
			position:absolute;
			width: 150px;
			height: auto;
			padding:5px;
			background-color: white;
			border:1px solid #ccc;
			-webkit-border-radius:10px;
			-moz-border-radius:10px;
			border-radius: 10px;font-style: 
			-webkit-box-shadow:4px 4px 10px rbga(0,0,0,0.4);
			-moz-box-shadow:4px 4px 10px rbga(0,0,0,0.4);
			box-shadow:4px 4px 10px rbga(0,0,0,0.4);
			pointer-events: none;
		}
		#tooltip.hidden{display: none;}
		#tooltip p {
			margin:0;
			font-family: sans-serif;
			font-size: 16px;
			line-height: 20px;
		}
    </style>

</head>
<body>
	<div id="tooltip" class="hidden">
		<p><strong>This Value is:</strong></p>
		<p><span id="tooltip_value">100</span></p>
	</div>
	<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
    <script src="https://d3js.org/d3.v3.js"></script>
	<script type="text/javascript">
		let w = 500;
       let h = 100;
       let padding = 30;
       let barPadding =10;
       let sortOrder = false;
       let svg = d3.select("body").append("svg").attr("width",w).attr("height",h);//把append()返回的新元素保存在了变量svg中
       let dataset = [5,10,6,3,25];
       svg.selectAll("rect")
           .data(dataset)
           .enter()
           .append("rect")
           .attr({
		    x:function(d,i){return i* (w/dataset.length);},
		    y:function(d){return h-(d*4);},
		    width: w/dataset.length - barPadding,
		    height: function(d){return d*4;},
		    fill: function(d){return "rgb(0,0,"+(d*10)+")";}
			})
            .on("mouseover",function(d){
            	//设置提示条的x,y坐标
            	let xPosition = parseFloat(d3.select(this).attr("x"));
            	let yPosition = parseFloat(d3.select(this).attr("y"));
            	//更新提示条位置和值
            	d3.select("#tooltip")
            	  .style("left",xPosition+"px")
            	  .style("top",yPosition+"px")
            	  .select("#tooltip_value")
            	  .text(d);
            	  //显示提示条
            	d3.select("#tooltip").classed("hidden",false);

            })
            .on("mouseout",function(){
            	//隐藏提示条
            	d3.select("#tooltip").classed("hidden",true);
            })
            .on("click",function(){
           	   sortBars();//调用排序
           });
       svg.selectAll("text")
        .data(dataset)
        .enter()
        .append('text')
        .style("pointer-events","none")
        .text(function(d){
            return d;
        })
        .attr({
            x:function(d,i) {
                return i * (w/dataset.length)+40;
            },
            y:function(d){return h-(d*4)+14;},
            fill:"red",
        });
        var sortBars = function() {
        	sortOrder = !sortOrder;
        	// 选择所有rect元素,使用D3提供的sort()方法,排序依据是绑定到它们的数据值
        	svg.selectAll("rect")
        	   .sort(function(a,b){
        	   	    if(sortOrder){
        	   			return d3.ascending(a,b);//比较函数接受来自两个不同元素的数据值,针对数组中每一对元素都被调用一次,然后它比较a和b,知道所有数组元素都按我们指定的规则排序完毕
        	   	    }else {
        	   	    	return d3.descending(a,b);//降序
        	   	    }
        	   		
        	   })
        	   .transition()
        	   .duration(1000)
        	   .delay(function(d,i){return i*10;})
        	   .attr({
			    x:function(d,i){return i* (w/dataset.length);},
			    y:function(d){return h-(d*4);}
			   });
        	svg.selectAll("text")
        	   .sort(function(a,b){
        	   		if(sortOrder){
        	   			return d3.ascending(a,b);
        	   	    }else {
        	   	    	return d3.descending(a,b);
        	   	    }
        	   })
        	   .transition()
        	   .duration(1000)
        	   .delay(function(d,i){return i*10;})
		       .attr({
		            x:function(d,i) {
		                return i * (w/dataset.length)+40;
		            },
		            y:function(d){return h-(d*4)+14;},
		            fill:"red",
		       });
        	   
        };
	</script>
</body>
</html>
VUE - D3 导图 点击事件无法与外部交互的问题 已解决 底部是解决方案 不知道VUE是什么的,百度; 不知道d3.js是什么的,百度; 都知道的,请看代码: <template> <div> <svg width="500" height="500"></svg> </div> </template> <script> export defaul... 阅读详情

相关推荐

技术美术个人笔记(十六)——Houdini到UE的大地形

文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形

小谁的博客 3178

D3中的交互式操作

什么是交互 交互,指的是用户输入了某种指令,程序接受到指令之后必须做出某种响应。对可视化图表来说,交互能使图表更加生动,能表现更多内容。例如,拖动图表中某些图形、鼠标滑到图形上出现提示框、用触屏放大或缩小图形等。 用于用户交互的工具 鼠标、键盘、触屏 如何添加交互 来看简单交互的demo var rect = svg.append("rect"); rect.on("mouseover", f...

The One Who's at the Front 2946

4 种方法识别Linux系统 USB 设备

导读 如果在系统中插入一个设备,尤其是在桌面环境下,比如 USB 设备,它会自动挂载到一个指定目录,一般是在 /media/username/device-label 目录下,之后你就可以进入到该目录下访问那些文件了。然而,在服务器上就不是这么回事了,你必须手动挂载这个设备,并且指定一个挂载点。 查询USB设备 Linux 系统使用 /dev 目录下特定的设备文件来标识插入的

郑帅的博客 1986

D3.js 鼠标事件

其实我们大家都比较熟悉js原生的鼠标事件,像鼠标点击/移动等事件,因为d3归根结底是操作的dom元素,所以一样是可以使用鼠标事件的,使用selection.on()这个API即可。// 这里的this是获取到的对应的rect元素。// 这里的this是获取到的对应的rect元素。// 这里的this是获取到的对应的rect元素。// 返还的数值是一个数组,返回x y坐标。// 这一步是生成一个矩形元素。// 获取对应的rect元素。// 获取svg元素的节点。// 可以添加动画效果。

weixin_57182748的博客 1459

KTransformers安装笔记 利用docker安装KTransformers

KTransformers安装笔记 利用docker安装KTransformers

guoqingru0311的博客 1559

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

d3事件(二):事件的触发与自定义事件

d3事件(二):事件的触发与自定义事件 原创蚁方阵 最后发布于2016-08-05 23:49:44 阅读数 5200 收藏 展开 在第4版中,d3新增了事件的触发函数dispatch,类似于jquery的trigger函数,用于触发dom元素的事件处理函数。并且,d3的选择集合还可以注册任意名称的事件与相关的事件处理函数,即自定义事件。 假定页面中还存在文章”d3事件...

cxu123321的博客 1248

springboot + netty 实现多客户端登录 超出设备 并下线

本文档旨在详细描述多平台登录控制的需求和实现方案。当前系统仅支持单设备登录,需扩展为支持多设备同时在线,并提供多种登录策略。文档详细列出四种策略:单平台登录、双平台登录、三平台登录和多平台同时在线,每种策略的具体限制和支持平台。技术实现方案包括数据结构设计、NettyUtils 工具类方法、WebSocketHandler 修改,以及相应的测试方案

Likefr 1877

d3事件 二 事件的触发与自定义事件

d3事件 二 事件的触发与自定义事件

qq_44884577的博客 708

uCOS中的消息邮箱(:task与task之间传递一个数据(数据缓冲区))

程序需求,需要完成task与task之间  字符数组的数据传输 比如:在ucos中,串口2接收的字符数组是不定时的&不定长的;只有当接收到数据的时候_才将数据赋值给新数组 具体的程序示意如下: 图1:消息邮箱测试中的     向消息邮箱发送消息(OSMboxPost(Str_Box,(void*)rec);//发送消息--(向 消息邮箱_msg_key发送消息) ),实际项目需求的

faguoduifangui的博客 4540

手把手教你学Simulink--基于车联网与智能交通系统的场景实例:基于车联网(V2X)的实时路况信息共享与处理

《基于Simulink的车联网(V2X)实时路况共享系统仿真》摘要:本文详细介绍使用Simulink构建V2X智能交通系统的完整方法。系统包含交通路网建模、V2X通信实现(支持DSRC/C-V2X标准)、多源路况信息融合、动态路径规划等核心模块。通过对比实验,验证V2X可使平均车速提升52%,行程时间缩短34%,显著提升交通效率。文章还探讨了AI预测调度、车辆编队等高级应用,为智慧交通系统开发提供实用参考。所需工具包括Simulink、SimEvents及无线通信工具箱等。

MHD0815的博客 737

d3 mouseover Tips

本篇简单介绍d3 mouseover添加tips的实现 绘制曲线 以前几篇的d3曲线为例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> ...

weixin_30765577的博客 859

OSCP-1-3-natraj(本地文件包含、日志中毒、apache2配置漏洞、nmap提权)

像往常一样,我们将使用“Netdiscover”工具识别主机的 IP。所以,让我们首先用 nmap 列出所有 TCP 端口。我们从访问web服务(80端口)开始,在那里我们找到了几张关于Natraj的图片和信息,我们将查看源代码和robots.txt,似乎没有什么有用的。(或至少,目前)。因此,让我们继续进行。在 Dirb 及其默认字典的帮助下,我们找到了一个名为“”的目录。我们进入并列出一个名为“”的文件:如果我们执行它,我们会看到它什么也不做。我们可能需要添加其他内容。

墨痕诉清风的博客 528

【D3.js 学习总结】21、D3交互事件

前20节中,我们讲了各种静态D3图表的制作,好的图表应该是要与用户进行互动的,这节来讲讲D3的交互事件; d3.event selection选择器事件监听的写法跟平时我们用的jQuery类似,如: selection.on(‘click’,function(d,i){ alert(‘ok’); }) 但请注意,点击事件触发的匿名函数参数不是我们常用的...

weixin_33943836的博客 1019

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

D3(四)

可视化图形 可视化的图形主要有两种: 层级结构的可视化 层级结构:树, 最直接、最直观的可视化方案。 数据格式为JSON格式,节点可以包含“属性” 网络结构的可视化 网络结构:图 绘制树状图 树状图用于表示层级、上下级、包含与被包含关系。 绘制一个树状图主要分为四步: 选中页面设置的svg绘制区域的宽高 添加g元素 设置位置 生成树状布局,设置尺寸 对角线生成器 请求数据,渲染数据 获取节点数组和连线数组 绘制连线 绘制节点 给节点添加圆圈设置半径 给节点添加文本 设置文本样式 位置

chili_fan的博客 1986

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

D3.js(三):交互

d3-drag Drag-and-drop 是一种易学流行的交互手势:将指针指向目标对象,按下并且拖动它到一个新的位置,然后释放。D3 的 drag 提供了方便灵活并且抽象的拖拽交互。 例子 ????: I. 力导向图 II. 小球(密集恐惧症慎点) III. Draw Me ◎ d3.drag() 创建一个新的拖拽行为并返回自身。drag 既是一个对象,也是一个函数,通常通过 selection.c...

Bule_daze的博客 921

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

D3 笔记七:交互事件、event、this

交互 它指的是用户输入了某种指令,程序接受到指令之后必须做出某种响应。 用户用于交互的工具一般有三种:鼠标、键盘、触屏。 API与常用事件 在 D3 中,每一个选择集都有 on() 函数,用于添加事件监听器。on() 的第一个参数是监听的事件,第二个参数是监听到事件后响应的内容,第二个参数是一个函数。鼠标常用的事件有:click:鼠标单击某元素时,相当于 mousedown 和 mouseup

JimmyLuo17的博客 3547

「数据可视化 D3系列」入门第九章:交互式操作详解

在上一章的柱状图基础上,我们增加了交互功能,让图表能够响应用户的操作。下面我将详细解释交互式操作的实现方式,并展示如何为下一章的饼图做准备。

XH_jing的博客 1453

3步打造D3.js交互数据选择器:从入门到实战

D3.js是一款强大的数据可视化库,能够通过SVG、Canvas和HTML将数据生动地呈现出来。本文将为你介绍如何快速上手D3.js,并通过三个简单步骤打造一个功能完善的交互数据选择器,帮助你轻松实现数据的筛选与交互操作。 ### 一、准备工作:了解D3.js选择器基础 在开始构建交互数据选择器之前,我们首先需要了解D3.js的选择器功能。D3.js提供了强大的选择器API,允许你通过CSS选

gitblog_00714的博客 862

D3.js 交互式操作

与图表的交互,指在图形元素上设置一个或多个监听器,当事件发生时,做出相应的反应。 一、什么是交互   交互,指的是用户输入了某种指令,程序接受到指令之后必须做出某种响应。对可视化图表来说,交互能使图表更加生动,能表现更多内容。   例如,拖动图表中某些图形、鼠标滑到图形上出现提示框、用触屏放大或缩小图形等等。   用户用于交互的工具一般有三种:鼠标、键盘、触屏。 ...

321

【亲测免费】 React D3 Components 使用教程

React D3 Components 是一个开源库,旨在帮助开发者将 D3.js 的输出重定向到 React 的虚拟 DOM 中。通过这个库,开发者可以将现有的 D3 代码转换为 React 组件,从而利用 React 的虚拟 DOM 和 diff 算法进行优化。React D3 Components 不仅支持基本的图表,还支持过渡、动画、工具提示、缩放、刷选、事件监听等功能。 ## 2. 项...

gitblog_00370的博客 875

D3.js的v5版本入门教程(第十一章)——交互式操作

D3.js的v5版本入门教程(第十一章)     与图形进行交互操作是很重要的!所谓的交互操作也就是为图形元素添加监听事件,比如说当你鼠标放在某个图形元素上面的时候,就会显示相应的文字,而当鼠标移开后,文字就会消失,或者鼠标单击一下某图形元素就会使它动起来     为了与图形元素进行交互操作,我们还是需要以下新的知识点 on("eventName",function);该函数是添加一个监...

数星星等天明的博客 9163

D3.js 介绍与入门

D3.js(全称:Data-Driven Documents)数据驱动文档是一个基于数据驱动 DOM 的 JS 库。 相比EChart、G2...之类的封装好的图标库,D3就像一个Jquery。 封装了很多函数供开发者使用。

kang_k的博客 1万+

D3JS可视化入门

文章目录安装和配置安装d3js本地服务器调试基本操作数据加载数据绑定数据SVG条形图散点图定义坐标轴更新视图增加数据字典绑定事件监听自动排序提示条布局饼图堆叠柱状图力图地图 安装和配置 安装d3js 在d3js的官网上可以直接下载d3js的文件,其中包含一个完整版和mini版,差别并不是很大。调试的时候可以使用完整版,发布的时候可以使用mini版,提高加载速度 本地服务器调试 可以利用python...

Peter_Luoz的博客 2万+

可视化工具D3.js教程 入门 (第十章)—— 交互式操作

可视化工具D3.js教程 入门 (第十章)—— 交互式操作 这里所说的交互式操作,就是说的图表的事件监听。 on(‘eventName’,funvtion(){ … } ) 第一个参数是要监听的事件名称 第二个参数是要执行的函数,跟jquery类似。 在上一张的柱状图基础上 ,给柱状图增加鼠标移入与移出事件,改变其颜色 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

weixin_44867717的博客 689

【D3使用教程】(5) 动态更新与过渡动画

数据总是在变化的,那么我们要如何将变化的数据反映到图表上呢? 在D3中,这些变化通过更新进行处理。而过渡通过使用动画用于处理视觉上的展示。 (1)更新 首先,我们定义一个序数比例尺: let xScale = d3.scale.ordinal()//定义一个序数比例尺,用于处理序数 注:序数是一些有固定顺序的一些类别,如: 新生、大二、大三、毕业班 B等、A等、AA等 非常不喜欢...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 5239
上一篇: 【D3使用教程】(5) 动态更新与过渡动画
下一篇: 【D3使用教程】(7) 结语 | 附加学习网站
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值