修改文件选择框input type=file的样式

文件选择框(input type=“file”)的默认样式跟项目中的样式不是很搭,所以需要修改文件选择框的样式。

效果图:
在这里插入图片描述

方式一,使用::file-selector-button

HTML:

<input type="file" id="default-btn">

CSS:

#default-btn::file-selector-button{
    padding: 6px 10px;
    background-color: #1E9FFF;
    border: 1px solid #1E9FFF;
    border-radius: 3px;
    cursor: pointer;
    color: #fff;
    font-size: 12px;
}

这种方法,文件选择框右侧默认就显示“未选择文件”的文字。如果您想隐藏这些文字,可以设置选择框input元素的font-size:0,即:

#default-btn{
    font-size: 0;
}

了解更多关于::file-selector-button

方式二,使用label标签

HTML:

<span>
    <label for="fileInput" class="input-button" title="选择您的头像图片进行上传">选择文件</label>
    <input id="fileInput" type="file" style="display: none;">
</span>
<span id="fileName"></span>

CSS:

.input-button {
    display: inline-block;
    padding: 6px 10px;
    background-color: #1E9FFF;
    border: 1px solid #1E9FFF;
    border-radius: 3px;
    cursor: pointer;
    color: #fff;
    font-size: 12px;
}

方式三,使用相对定位+透明

HTML:

<span class="inputBtn">
    <span>选择文件</span>
    <input class="inputFile" type="file" id="myImg" name="myImg" title="选择您的头像图片进行上传">
    </span>
<span id="fileName"></span>

CSS:

.inputBtn {  
    position: relative;  
    display: inline-block;  
    padding: 6px 10px;  
    border: 1px solid #1E9FFF;  
    border-radius: 3px;  
    background-color: #1E9FFF;  
    cursor: pointer;  
    font-size: 12px;  
    color: #fff;  
}  
.inputBtn:hover{  
    border: 1px solid #3aa9fb;  
    background-color: #3aa9fb;  
}  
.inputFile {  
    position: absolute;  
    left: 0;  
    top: 0;  
    width: 100%;  
    height: 100%;  
    opacity: 0;  
    filter: alpha(opacity=0);  
}  

方法三无法修改鼠标移上去时的手势,即input框设置为`cursor: pointer`不生效。因为方法三是将input框的透明度设置为0,实际上还是在按钮上方的。如果项目没有要求鼠标移上去时的手势,就忽略这个问题。

显示上传文件的文件名称:

针对方法二和方法三

效果图:
在这里插入图片描述

默认的文件选择框上传完文件之后,在右侧会显示上传文件的文件名称。如果需求需要显示,则可以按以下方式实现,如果不需要可忽略。

const myImgEL = document.getElementById('myImg');  
const fileNameEL = document.getElementById('fileName');  
myImgEL.addEventListener('change', (event) => {
    // event.target.value的值打印是C:\fakepath\head.jpg
    // var name = event.target.value.split('\\')[2];	// 这种方式也可以  
    // console.log(name);
    const fileName = event.target.value.match(/[^\\|/]*$/)[0];
    console.log(fileName)
    fileNameEL.innerHTML = fileName;
});

原创不易,转载请注明本文出处及原文链接。

点赞,如果这篇文章对您有帮助,请点个赞,将是我创作的动力!

收藏,如果觉得这篇文章有参考价值,请收藏起来,方便以后阅读。

评论,欢迎在评论区与我分享您的想法和建议,将是对我最大的支持和鼓励。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
day02 昨天内容回顾 1、html的操作思想 ** 使用标签把要操作的数据包起来,通过修改标签的属性值来实现标签内数据样式的变化 *** <font size="5"></font> 2、图像标签 <img src="图片的路径"/> ** 通过html访问本地图片,使用绝对路径,目前有问题 3、超链接标签 <a href="" target="_blank"></a> 4、表格标签 ** 技巧:数里面有多少行,每行里面有多少个单元格 ** <table></table> <tr> <td> <th> 5、表单标签 ** <form></form> - action method enctype - method: get post ** 输入项 *** 有name属性 * 普通输入项 type="text" * 密码: password * 单选:radio - name值相同 - value值 * 复选:checkbox - name值相同 - value值 * 下拉 select option * 文本域 textarea * 隐藏项:type="hidden" * 文件type="file" * 提交按钮 type="submit" * 重置 : reset * 使用图片提交: <input type="image" src=""/> * 普通按钮 type="button" 6、div和span * div: 自动换行 * span:在一行显示 CSS 1、css的简介 * css: 层叠样式表 ** 层叠:一层一层的 ** 样式表: 很多的属性和属性值 * 是页面显示效果更加好 * CSS将网页内容和显示样式进行分离,提高了显示功能。 2、csshtml的结合方式(四种结合方式) (1)在每个html标签上面都有一个属性 style,把csshtml结合在一起 - <div (2)使用html的一个标签实现 <style>标签,写在head里面 * <style type="text/css"> css代码; </style> * <style type="text/css"> div { background-color:blue; color: red; } </style> (3)在style标签里面 使用语句(在某些浏览器下不起作用) @import url(css文件的路径); - 第一步,创建一个css文件 <style type="text/css"> @import url(div.css); </style> (4)使用头标签 link,引入外部css文件 - 第一步 ,创建一个css文件 - <link rel="stylesheet" type="text/css" href="css文件的路径" /> *** 第三种结合方式,缺点:在某些浏览器下不起作用,一般使用第四种方式 *** 优先级(一般情况) 由上到下,由外到内。优先级由低到高。 *** 后加载的优先级高 *** 格式 选择器名称 { 属性名:属性值;属性名:属性值;…….} 3、css的基本选择器(三种) ** 要对哪个标签里面的数据进行操作 (1)标签选择器 * 使用标签名作为选择器的名称 div { background-color:gray; color:white; } (2)class选择器 * 每个html标签都有一个属性 class - <div class="haha">aaaaaaa</div> - .haha { background-color: orange; } (3)id选择器 * 每个html标签上面有一个属性 id - <div id="hehe">bbbbb</div> - #hehe { background-color: #333300; } *** 优先级 style > id选择器 > class选择器 > 标签选择器 4、css的扩展选择器 (1)关联选择器 * <div><p>wwwwwwww</p></div> * 设置div标签里面p标签的样式,嵌套标签里面的样式 * div p { background-color: green; } (2)组合选择器 * <div>1111</div> <p>22222</p> * 把div和p标签设置成相同的样式,把不同的标签设置成相同的样式 * div,p { background-color: orange; } (3)伪元素选择器(了解,浏览器的兼容性比较差) * css里面提供了一些定义好的样式,可以拿过来使用 * 比如超链接 ** 超链接的状态 原始状态 鼠标放上去状态 点击 点击之后 :link :hover :active :visited ** 记忆的方法 lv ha 5、css的盒子模型 ** 在进行布局前需要把数据封装到一块一块的区域内(div) (1)边 border: 2px solid blue; border:统一设置 上 border-top 下 border-bottom 左 border-left 右 border-right (2)内边距 padding:20px; 使用padding统一设置 也可以分别设置 上下左右四个内边距 (3)外边距 margin: 20px; 可以使用margin统一设置 也可以分别设置 上下左右四个外边距 6、css的布局的漂浮(了解) float: ** 属性值 left :  文本流向对象的右边 right :  文本流向对象的左边 7、css的布局的定位(了解) position: ** 属性值 - absolute : *** 将对象从文档流中拖出 *** 可以是top、bottom等属性进行定位 - relative : *** 不会把对象从文档流中拖出 *** 可以使用top、bottom等属性进行定位 8、案例 图文混排案例 ** 图片和文字在一起显示 9、案例 图像签名 ** 在图片上面显示文字 10、上午内容总结 1、csshtml的四种结合方式(****) 2、css的基本选择器(****) * 标签选择器 使用标签名 * class选择器 .名称 * id选择器 #名称 ** 优先级 style > id > class > 标签 3、css的扩展选择器(了解) * 关联选择器 - 设置嵌套标签的样式 div p {} * 组合选择器 - 不同的标签具有相同的样式 div,p{} * 伪元素选择器 * 超链接的状态 - 原始 :link - 悬停 :hover - 点击 :active - 点击之后 :visited 4、盒子模型(了解) * 边 border:2px solid red; 上下左右 border-top border-bottom border-left border-right * 内边距 padding:20px 上下左右 * 外边距 margin:20px 上下左右 * 对数据进行操作,需要把数据放到一个区域里面(div) 5、布局的漂浮(了解) float - left: 后面的div到右边 - right:后面的div到左边 6、布局的定位(了解) position - absolute ** 从文档流中拖出 - relative ** 不会从文档流中拖出 一般在目录里面,标出符号 (********):重点,代码看懂,代码会写,代码理解 - (****重点中的重点***) (了解):代码看懂 (理解):能够把原理讲清楚
Javashop开发规范V2.2 版本 说明 提交人 V1.0 初稿 定义了包名、异常、事务、和路径的规范 王峰 V2.0 1. 重新整理了命名规范 2. 增加常用命词对照表 王峰 V2.1 1.增加数据库操作的说明 2.增加常用方法介绍 王峰 V2.2 增加关于数据导入导出的说明 王峰 V2.3 增加校验使用说明(5.3章节) 王峰 1 命名规范 1.1 包命 1. 小写字母 2. 以com.enation.javashop开头 3. 组件以com.enation.compoent开头 1.2 类名 一、 action 以Action结尾,如:UserAction 二、 业务类 1.接口: 以I开头,以Manager结尾,如:IUserManager 2.实现类 以Manager结尾,如:UserManager 三、 组件类 以Component结尾,如:ShopEmailComponent 四、 挂件类 以Widget结尾,如:MemberAddressWidget 五、 插件类 以Plugin结尾,如:SendRegMailPlugin 1.3 变量/属性命名规则 1. 全部小写 2. 可用下划线连接 如:username、 userid 1.4 方法命名 1.4.1 Action类 add 到添加页 edit 到修改页 saveAdd 保存添加 saveEdit 保存修改 delete 删除 list 列表 1.4.2 业务类 add 添加 edit 修改 delete 删除 list 列表 get 读取详细 2 数据库开发规范 2.1 数据操作支持类 一、 业务类数据库调用 1.继承于BaseSupport 2.在spring文件中声明parent为baseSupport <bean id="xxxManagerImpl" class="xxx.xxx.xxx.XxxxManager" parent="baseSupport"/> 3.通过this.baseDaoSupport操作数据库 实际使用的是:com.enation.eop.sdk.database.BaseJdbcDaoSupport 此种操作示例: com.enation.javashop.core.service.impl.BrandManager 注意事项:见【BaseDaoSupport的意义和存在的问题】 二、 直接声明baseDaoSupport操作数据库 在一些挂件类中或某些特殊情况,可以直接需要直接声明baseDaoSupport 此种操作示例: com.enation.javashop.core.service.impl.batchimport.GoodsSpecImporter 注意事项:见【BaseDaoSupport的意义和存在的问题】 2.2 BaseDaoSupport的意义存在的问题 BaseDaoSupport对JdbcDaoSupport进行包装,通过 baseDBRouter 获取表名, 为什么要通过 baseDBRouter 来获取表名呢?Eop机制是支持SAAS(多租户)模式运行的,在SAAS会为每个用户提供如:es_goods_<userid>_<siteid>这样的表。 为了保证在单机版和SAAS模式中都运行正常,BaseDaoSupport将过滤sql中的相应表名。 但目前还只能支持简单的单表select、insert、update,对于多表的联合查询或更新不能支持。 在这种情况下,就需要通过 daoSupport(com.enation.framework.database.impl.JdbcDaoSupport)来操作,daoSupport不对sql进行任何更改,这时为了保证兼容saas模式兼容性,就要使用BaseSupport.getTableName(String tablename)方法 或baseDBRouter.getTableName(String tablename);来保证表名的正确。 (够混乱?真心希望出现一位大侠拯救这个状况,使basedaosupport可以处理所有情况的sql) 2.3 实体Bean和数据库表对照 Javahop数据库操作支持,将对象直接保存或修改,如: this.baseDaoSupport.insert("brand", brand); this.baseDaoSupport.update("brand", brand, "brand_id=" + brand.getBrand_id()); 规则为:实体中的属性名和数据库表的字段名相同,如: 对应的数据库字段: 2.4 注解的使用 2.4.1 @NotDbField 在某个实体Bean中,我们可能会有一些属性不对应数据库字段,这时我们需要在相应的 Geter方法中加上@NotDbField注解,以便使数据库机制知道这个字段不转为sql语句,如: private File file; @NotDbField public File getFile() { return file; } 2.4.2 @PrimaryKeyField 在实合格bean和数据库对照过程中,数据库机制需要识别主键,所以需要我们在主键的对应属性的Geter方法中加上@PrimaryKeyFiled注解,如: private Integer brand_id @PrimaryKeyField public Integer getBrand_id() { return brand_id; } 3 数据导入 3.1 导入接口 DBSolutionFactory.dbImport("file:com/enation/javashop/component/coupon/add.xml","es_"); 3.2 数据Xml文件说明 3.2.1 创建表 <action> <command>create</command> <table>tablename</table> <field> <name>id</name> <type>int</type> <size>8</size> <option>11</option> </field> <field> <name>name</name> <type>varchar</type> <size>255</size> <option>00</option> </field> </action> 3.2.2 删除表 <action> <command>drop</command> <table>tablename</table> </action> 3.2.3 添加、删除列 <action> <command>alter</command> <table>goods</table> <field type="add"> <name>isgroupbuy</name> <type>int</type> <size>1</size> <default>0</default> </field> <field type="drop"> <name>isgroup</name> </field> </action> 3.2.4 创建索引 <action> <command>index</command> <table>goods</table> <field > <name>goodsid</name> </field> </action> 3.2.5 删除索引 <action> <command>unindex</command> <table>goods</table> <field > <name>goodsid</name> </field> </action> 3.2.6 插入数据 <action> <command>insert</command> <table>es_adcolumn</table> <fields>acid,cname,width,height,atype,disabled</fields> <values>5,'列表页上部横幅','972px','67px',0,'false'</values> </action> 3.2.7 删除数据 暂未支持 3.2.8 更新数据 暂未支持 3.3 数据类型对照表 xml Mysql Oracle SqlServer int int NUMBER smallint int(1) smallint(1) NUMBER(2) int memo text CLOB text datetime datetime TIMESTAMP datetime long bigint NUMBER bigint decimal decimal NUMBER(20,2) decimal 4 数据导出 String[] tables = new String[1]; tables[0] = "es_auth_action"; DBSolutionFactory.dbExport(tables, false, "") 5 常用方法介绍 5.1 上下文获取 参见: http://www.javamall.com.cn/developer_help/index.php/常用方法 5.2 地区联动下拉 1.如果是在jsp 中: <html:regionselect></html:regionselect> 2.如果是在Freemarker的html中: <#assign RegionSelect= "com.enation.app.base.component.widget.regions.RegionSelectDirective"?new()> <@RegionSelect /> 以上两种方式均支持以下参数: province_id:省id city_id:市id region_id:区id 如果指定上述参数,则默认选中 5.3 客户端校验 EOP自动为应用提供表单校验功能,通过指定form样式名和指定表单项特定属性的方式来完成。 5.3.1 示例 代码示例 [removed] function checkUserName(val){ if(val=='kingapex' ) return true; else return "用户名已存在"; } $.Validator.options={lang:{isrequired:'此项不能为空!'}}; [removed] <form class="validate"> 必须:<input type="text" name="test1" isrequired="true"> <br/> 整型:<input type="text" name="test2" isrequired="true" dataType="int"> <br/> 浮点型:<input type="text" name="test3" dataType="float"> <br/> 邮件:<input type="text" name="test4" isrequired="true" dataType="email"> <br/> 日期:<input type="text" name="test5" isrequired="true" dataType="date"> <br/> 电话号码:<input type="text" name="test6" isrequired="true" dataType="tel_num"> <br/> 手机:<input type="text" name="test7" isrequired="true" dataType="mobile"> <br/> 邮政编码:<input type="text" name="test8" isrequired="true" dataType="post_code"> <br/> 网址:<input type="text" name="test9" isrequired="true" dataType="url"> <br/> 自定义函数:<input type="text" name="test10" isrequired="true" fun="checkUserName"> <br/> <input type="submit" value="确定" /> </form> 5.3.2 参数说明: 5.3.2.1 isrequired 为true则为必填项,不指定或指为false则为非必填项。 5.3.2.2 dateType 指定校验特殊类型,支持的类型见下表: 类型 说明 int 整数 float 浮点数 email 邮件格式 date 日期格式 tel_num 电话格式 mobile 手机格式 post_code 邮编 url 网址 5.3.2.3 fun 自定义校验函数,返回真则通过校验,返回假或字串则校验失败,返回的字串会出现在失败提示中。 5.3.2.4 动态绑定校验函数 通过 setValidator实现 $("#region_id").setValidator(function(){ var value = $("#region_id").val(); if( value=="" || value=="0" ) return "地区信息不完整"; else return true; }); 5.3.2.5 提示器 提示器用于显示校验的结果,如果不指定默认会在校验的控件后面创建一个span做为提示器。 可以通过两种方式指定提示器: 一、在控件中声明tiper属性: <input type="text" name="username" tiper="#name_tiper" /> 注:tiper指定的是jquery的一个选择器表达式。 二、动态指定: $("#region_id").setTiper($("#name_tiper")); 注:此时指定的是jquery对象,而不是一个表达式 5.3.2.6 手动调用: $("#siteForm").checkall(); 6 常用字典对照表 6.1 常用值 名称 值 说明 返回结果 0:失败 1:成功 适用于: 1. 客户端json返回值 2. 服务器端方法返回值 3. 数据库是否的标识值 性别 0:女 1:男 6.2 常用名称 名称 英文 商品 goods 货品 product 规格 spec 订单 order 会员 member 积分 point 购物车 cart 结算 checkout 订单 order 品牌 brand 分类 cat 优惠劵 coupon 支付 payment 团购 groupbuy 虚拟 virtual 发票 receipt 属性 prop 参数 param 标签 tag 地区 region 7 异常 1. 提供统一的异常处理机制 2. 底层级别的类不处理异常,只管向上抛出异常,且统一抛出RuntimeExcepton 8 事务处理 1. 数据库统一使用Srping AOP事务 2. 采用注解方式: 在接口处: @Transactional(propagation = Propagation.isrequired) 9 路径的规范 返回的路径变量最后不带 ‘/’ 如:String path =”user/1”; 使用者: path = path+”/”+myVar; 10 样式/HTML规范 10.1 前台分页 <div class="page"><span class="info">共41条记录</span> <span class="info">1/3</span> <ul><li><a class="selected">1</a></li> <li><a href="search-cat-4-page-2.html" class="unselected">2</a></li> <li><a href="search-cat-4-page-3.html" class="unselected">3</a></li> <li><a href="search-cat-4-page-2.html" class="unselected">>></a></li> <li><a href="search-cat-4-page-3.html" class="unselected">>|</a></li> </ul></div>
form表单元素包括:text 文本输入,password密码输入,checkbox复选,radio单选file 文件域,submit表单提交action指向的文件,reset表单清空,image图片提交按钮,button按钮,hidden隐藏域。 select option select 实现下拉选 callback 是回调函数 layui.模块   模块可以是layui已经存在的模块,也可以通过layui.define([mods], callback) 来自己自定义模块。 如果想要使用模块首先要做的必然是加载模块,layui.use(['laypage', 'layedit'], function(){}); 接下来使用layui风格控件  其实感觉layui帮我们定义好了CSS和许多JS文本,我们需要做的只是按照layui的命名规范选好样式进而使用就可以了。  layu官方文档的命名规范为: CSS命名规范 class命名前缀:layui,连接符:-,如:class="layui-form" 命名格式一般分为两种: 一:layui-模块名-状态或类型 二:layui-状态或类型 因为有些类并非是某个模块所特有,他们通常会是一些公共类。如: 一(定义按钮的原始风格):class="layui-btnlayui-btn-primary" 二(定义内联块状元素):class="layui-inline" 1 2 3 4 5 6 7 8 9 当然还有前面提到的使用模块的js代码: layui.use(['form', 'layedit', 'laydate'], function(){   var form = layui.form   ,layer = layui.layer   ,layedit = layui.layedit   ,laydate = layui.laydate;   //日期   laydate.render({     elem: '#date'   });   laydate.render({     elem: '#date1'   });   //创建一个编辑器   var editIndex = layedit.build('LAY_demo_editor');   //自定义验证规则   form.verify({     title: function(value){       if(value.length < 5){         return '标题至少得5个字符啊';       }     }     ,pass: [/(.+){6,12}$/, '密码必须6到12位']     ,content: function(value){       layedit.sync(editIndex);     }   });   //监听指定开关   form.on('switch(switchTest)', function(data){     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {       offset: '6px'     });     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)   });   //监听提交   form.on('submit(demo1)', function(data){     layer.alert(JSON.stringify(data.field), {       title: '最终的提交信息'     })     return false;   }); }); 下面我们按照官方文档的开发规范使用一下form表单的例子       表单集合演示           单行输入                       验证必填项                             验证手机                                   验证邮箱                                       多规则验证                                   验证日期                                   验证链接                                 验证身份证                       自定义验证                   请填写6到12位密码               范围                           -                                 单行选择                   </opt
### 回答1: input type="file" 标签样式是无法改变的,因为它的样式是由操作系统的文件选择器控制的。但是你可以使用一些技巧来模拟一个自定义样式文件选择器,比如使用 CSS 和 JavaScript 来隐藏原生的 input 元素,然后用一个自定义的按钮触发点击事件,再通过 JavaScript 来模拟文件选择器的操作。具体的实现方法可以参考一些开源的文件上传组件库。 ### 回答2: 要改变 input type=file样式,可以使用以下两种方法: 1. 使用样式丰富的外部库或架:可以使用一些流行的CSS库或架,如Bootstrap、Semantic UI等,它们提供了自定义文件输入按钮样式的选项。你可以使用它们提供的类或样式来覆盖默认的input type=file样式。具体的实现方法可以参考对应文档或示例。 2. 使用自定义样式和JavaScript:使用自定义样式和JavaScript可以更灵活地改变 input type=file样式,以下是一种常见的改变样式的方法: - 首先,隐藏默认的文件选择按钮:设置 input[type="file"] 的样式 display:none;,这样文件选择按钮将不会显示出来。 - 然后,在附近添加一个自定义的按钮或元素,例如一个按钮或一个带有图标的div。 - 当点击自定义按钮或元素时,通过 JavaScript 来触发 input type=file 的点击事件,使用户能够选择文件。可以使用下面的代码: (假设 input type=file 的 id 为 "fileInput") ```javascript document.getElementById("customButton").addEventListener("click", function() { document.getElementById("fileInput").click(); }); ``` - 最后,使用 CSS 来美化自定义按钮或元素的样式,例如改变颜色、添加边等等。 需要注意的是,虽然可以改变 input type=file 的外观样式,但出于安全考虑,浏览器仍然会强制要求用户使用默认的文件选择对话选择文件,而不是通过自定义样式的按钮来选择文件。 ### 回答3: 要改变<input type=file>的样式,可以使用以下方法: 1. 使用CSS样式:可以通过对<input type=file>应用CSS样式来自定义其外观。通过设置元素的宽度、高度、边、背景色等属性,可以改变文件输入的外观。同时,还可以通过设置文字颜色、字体大小等属性来改变文件输入中的提示文本。 2. 使用插件或架:有一些第三方插件或架提供了更丰富的文件输入样式定制选项。例如,可以使用jQuery插件如Fileinput等来改变文件输入的外观。这些插件通常提供了自定义按钮样式、预览功能等扩展功能。 3. 隐藏原始的文件输入,自定义一个替代的元素:可以使用CSS和JavaScript来隐藏原始的<input type=file>元素,并创建一个自定义的替代元素。例如,可以创建一个按钮或图标,并通过JavaScript与文件输入进行交互。当用户点击自定义元素时,可以模拟触发文件输入的点击事件,并实现文件选择功能。 需要注意的是,由于安全限制,无法直接改变<input type=file>元素的样式。然而,通过上述方法可以实现对文件输入样式定制或自定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值