06:HTML5课程

新增标签:

头部:

<header>用在页面的头部</header>

底部:

<footer>用在页面的底部</footer>

导航:

<nav>
        <a href="">fhdshfk</a>
        <a href="">fhdshfk</a>
        <a href="">fhdshfk</a>
        <a href="">fhdshfk</a>
        <a href="">fhdshfk</a>
</nav>

标题组合:

<hgroup>
    <h1>青叶软件</h1>
    <h2>移动互联网解决方案</h2>
</hgroup>

section:

<section>
    用于划分页面上不同区域或者划分文章里的不同的节。
</section>

article:

<article>表示页面上结构完整且独立的一部分,用来呈现论坛的一个帖子之类的。</article>

aside:

<aside>包含与当前应用相关的引用、侧边栏、广告、nav元素组以及其他类似的,有别于主要内容的部分</aside>

媒体元素组合figure和figcaption:

<figure>
    <img src="img/14.jpg" alt="1">
    <figcaption>风景不错</figcaption>
</figure>

事件time:

<time datetime="2011-01-12">January 12th, 2011</time>

提示化输入框datalist(想要与input一起使用):

<input type="text" list="valList" name="" value="" placeholder="">
<datalist id="valList">
    <option value="javascript">javascript</option>
    <option value="css">css</option>
    <option value="html">html</option>
</datalist>

文档中的细节details和summary:(加了open默认是打开的)

<details open>
    <summary>title or explanatory caption</summary>
    <p>这是内容</p>
</details>

对话dialog:

<dialog></dialog>

定义作者信息:address,没啥用其实。

<address></address>

标记mark:背景默认黄色

<mark>nihao a </mark>

公钥:keygen:

<form action="http://www.baidu.com" method="get" accept-charset="utf-8">
    用户:<input type="text" name="username" value="" placeholder="">
    公钥:<keygen keytype="rsa"></keygen>%0
    <input type="submit" value="submit">
</form>

进度条progress:

<progress value="76" max="100"></progress>

 

 

表单新增属性:

<input type="email" name="" value="提交">:强制用户输入带@才可以提交,否则提示

<input type="tel" name="" value="提交">:在移动端输入,则会默认出现数字键盘,PC端无变化。

<input type="url" name="" value="提交">:必须输入网址类型

<input type="search" name="" value="提交">:输入内容的时候,后面多了个X号,点击能全部取消。

<input type="range"  step="2" min="0" max="10">:步长为2的拉动的格子

<input type="number" name="" value="" placeholder="dsa">:只能输入数字

<input type="color" name="" value="" placeholder="">:用户能够选择颜色。

<input type="datetime" name="" value="" placeholder="">:显示完整日期

<input type="datetime-local" name="" value="" placeholder="">:显示完整日期,不含时期

<input type="time" name="" value="" placeholder="">:显示时间

<input type="date" name="" value="" placeholder="">:显示日期

<input type="week" name="" value="" placeholder="">:显示周

<input type="month" name="" value="" placeholder="">:显示月

placeholder:输入框提示信息

autocomplete:是否保存之前用户的输入值,默认on,关闭填off

autofocus:默认焦点在设置这个属性的input上,直接写,无需设置等于什么

required:必填

pattern:正则校验 pattern="\d(1,5)"

<form action="http://www.baidu.com" method="get" accept-charset="utf-8">
    <input type="text" name="" value="" placeholder="请输入1-5位数字" pattern="\d{1,5}">
    <input type="submit" name="" value="提交"/>
</form>

formaction:自定义提交表单的位置。举例如下:

<form action="http://www.baidu.com" method="get" accept-charset="utf-8">
    <input type="text" name="" value="" placeholder="请输入1-5位数字" pattern="\d{1,5}">
    <input type="submit" name="" value="提交"/>
    <input type="submit" name="" value="保存至草稿纸" formaction="http://www.miaov.com" />
</form>

 

 表单验证方法:

 

 新的选择器:

querySelector:本方法只能选择一组中的第一个元素

querySelectAll:选择组元素(含class元素)

getElementsByClassName:选择class元素。

关于querySelector、querySelectAll、getElementsByClassName的使用举例:

以下例子非常重要,你再也不用什么document.getElementByXXX了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload = function(){
            var oDiv1 = document.querySelector('#div1');
            var oDiv2 = document.querySelector('.div2');
            var oDiv3 = document.querySelector('[title = div3]');
            var oDiv4 = document.querySelectorAll('.all');
            var oDiv5 = document.getElementsByClassName('a');
            oDiv1.style.background = 'red';
            oDiv2.style.background = 'yellow';
            oDiv3.style.background = 'green';
            // oDiv4是数组,所以需要循环。
            for (var i = 0; i < oDiv4.length; i++) {
                oDiv4[i].style.background = '#aaa';
            }
            for (var i = 0; i < oDiv5.length; i++) {
                oDiv5[i].style.background = '#0a4';
            }
        }
    </script>
</head>
<body>
    <div id="div1">ds</div>
    <div class="div2">ds</div>
    <div title="div3">div3</div>
    <div class="all">div4</div>
    <div class="all">div5</div>    
    <div class="a">div6</div>
    <div class="a">div7</div>
</body>
</html>

 

 obj.classList:某对象下的数组,所以有以下属性:

——length:class的长度

——add():添加class方法

——remove():删除class方法

——toggle():切换class方法(如果原先有,就删除,如果没有就添加。如toggle('box5'))

 举例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>classList</title>
    <script type="text/javascript">
        window.onload = function(){
            var oDiv = document.querySelector('#div1');
            alert(oDiv.classList);    //box box1 box2
            alert(oDiv.classList.length);    //3
        }
    </script>
</head>
<body>
    <div id="div1" class="box box1 box2">div1</div>
</body>
</html>

 

JSON.parse():把字符串转成json。————字符串中的属性要严格加上引号。

JSON.stringify():把json转成字符串。————会自动把双引号加上。

eval与parse的区别:eval可以解析任何字符串变成JS,parse只能解析JSON形式的字符串变成JS,所以JSON.parse()的安全性比较高。

<script type="text/javascript">
    var str =  'function show(){alert(2)}';
    eval(str);
    show();        //2

    var str2 = '{"name":"hello"}';
    var json = JSON.parse(str2);    //请注意:上面的str不满足json的格式,是不能用这个方法的。
    alert(json.name);    //hello

    var json1 = {"name":"hello"};
    var str3 = JSON.stringify(json1);
    alert(str3);
</script>

 

————以上的2个方法ie7以下是不兼容的,如何做到兼容呢?www.json.org去下载json2.js,官网上位置截图如下:

 

data-属性名:这个能够自定义属性名,JS中能通过obj.dataset.属性名,获取得到属性的值。

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload = function(){
            var oDiv = document.querySelector('#div1');
            alert(oDiv.dataset.miaov);    //自定义属性
            alert(oDiv.dataset.miaovAll);    //妙味课堂
        }
    </script>
</head>
<body>
    <div id="div1" data-miaov="自定义属性" data-miaov-all="妙味课堂"></div>
</body>

 

defer:延迟加载,用于引入的js文件。

asycn:异步加载,用于引入的文件,相当于页面和js文件一起加载的。(默认情况下是先加载引入的js文件,再加载页面的。)

 

draggable:设置为true,元素就可以拖拽了。参考邮件的拖拽上传。请注意以下事件,既然是事件,就得触发的时候生效。

————火狐下有兼容,解决方法以后再说。

 

canvas:网页中的绘图。默认高300px,高150px。设置画布宽高一定要在标签里面设置,并且不用用style,直接用属性。

oC.getContext('2d'):设置绘制环境。

绘制方块:

——fillRect(L,T,W,H):填充的方块,默认颜色是黑色。

——strokeRect(L,T,W,H):带边框的方块。

——fillStyle:填充颜色(绘制canvas是有顺序的。)

——lineWidth:线宽度,是一个数值。

——strokeStyle:边线颜色。 

例子如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        body{background: #000;}
        #c1{background: #fff;}
    </style>
    <script type="text/javascript">
        window.onload = function(){
            var oC = document.querySelector('#c1');
            // 绘制环境。
            var oGc = oC.getContext('2d');    //webgl可以实现3d绘图
            /*oGc.fillStyle = 'red';
            oGc.fillRect(50,50,100,100);*/
            
            oGc.strokeStyle = 'yellow';
            oGc.strokeRect(50.5,50.5,100,100);    //50.5是为了边框确实是1px
        }
    </script>
</head>
<body>
    <!-- 一定要在标签上设置宽高 -->
    <canvas id="c1" width='400px' height="400px"> 

    </canvas>
</body>
</html>

 

方块还可以设置以下的属性,

 

 

 方块移动代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{ background:black;}
#c1{ background:white;}
span{ color:white;}
</style>
<script>
window.onload = function(){
    var oC = document.getElementById('c1');    
    var oGC = oC.getContext('2d');      
    var num = 0;    
    oGC.fillRect(0,0,100,100);    
    setInterval(function(){    
        num++;        
        oGC.clearRect(0,0,oC.width,oC.height);        
        oGC.fillRect(num,num,100,100);        
    },30);    
};
</script>
</head>
<body>
<canvas id="c1" width="400" height="400">
    <span>不支持canvas浏览器</span>
</canvas> <!--默认:宽300 高150-->
</body>
</html>

 

 绘制一个圆:

arc(x, y, radius, startAngle, endAngle, counterclockwise)
arc(x坐标,y坐标,半径,起始弧度,结束弧度,旋转方向)
弧度与角度的关系:弧度=角度*Math.PI/180

例子:最简单的例子:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <style type="text/css">
        body{background: #000;}
        #div1{background: #fff;width: 500px;height: 500px;margin: 20px auto;}
    </style>
    <script type="text/javascript">
        window.onload = function(){
            var i = 0;
            var oC = document.querySelector('#c1');
            var oGc = oC.getContext('2d');
            setInterval(function(){
                oGc.beginPath();
                oGc.arc(i++,i++,20,0,360*Math.PI/180,false);
                oGc.stroke();
            },30)
        }
    </script>
</head>
<body>
    <div id="div1">
        <canvas id="c1" width="400px" height="400px;">

        </canvas>    
    </div>
    
</body>
</html>
 
 
——————在出现定时器的时候,需要使用clearRect(0,0,oC.width,oC.height);把整个画布清空。不然每画一次的画布和画的图都在重叠。

例子:用arc去画一个钟表:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>画钟表</title>
    <style type="text/css">
        body{background: #000;}
        #c1{background: #fff;}
    </style>
    <script type="text/javascript">
        window.onload = function(){
            var oC = document.querySelector('#c1');
            var oGc = oC.getContext('2d');
            function toDraw(){
                var x = 200;
                var y = 200;
                var r = 150;
          
                oGc.clearRect(0,0,oC.width,oC.height);

                // 获取本地时间
                var oDate = new Date();
                var oHours = oDate.getHours();
                var oMin = oDate.getMinutes();
                var oSec = oDate.getSeconds();
                // -90是因为真实表盘的针是从顶部开始的,相当于倒回去90度。
                var oHoursValue = (-90+oHours*30+oMin/2)*Math.PI/180;
                var oMinValue = (-90+oMin*6+(oSec/10))*Math.PI/180;
                var oSecValue = (-90+oSec*6)*Math.PI/180;
                /*oGc.moveTo(x,y);
                oGc.arc(x,y,r,0,6*Math.PI/180,false);
                oGc.moveTo(x,y);
                oGc.arc(x,y,r,6*Math.PI/180,12*Math.PI/180,false);
                oGc.closePath();
                oGc.stroke();*/
                
                // 通过循环画出60个刻度,相当于秒,并且每个小刻度都指向圆心。
                oGc.beginPath();
                for (var i = 0; i < 60; i++) {
                    oGc.moveTo(x,y);
                    oGc.arc(x,y,r,6*i*Math.PI/180,6*(i+1)*Math.PI/180,false);
                }
                oGc.closePath();
                oGc.stroke();

                // 在圆中间弄出一个圆盘盖住,相当于只保留了外延的刻度。
                oGc.fillStyle = '#fff';
                oGc.beginPath();
                oGc.moveTo(x,y);
                // 设置半径为原先的0.95倍。
                oGc.arc(x,y,r*0.95,0,360*Math.PI/180,false);
                oGc.closePath();
                oGc.fill();

                // 画12个分针刻度。
                oGc.lineWidth = 3;
                oGc.beginPath();
                for (var i = 0; i < 12; i++) {
                    oGc.moveTo(x,y);
                    oGc.arc(x,y,r,30*i*Math.PI/180,30*(i+1)*Math.PI/180,false);
                }
                oGc.closePath();
                oGc.stroke();

                // 再盖一个表盘。
                oGc.fillStyle = '#fff';
                oGc.beginPath();
                oGc.moveTo(x,y);
                // 设置半径为原先的0.9倍。
                oGc.arc(x,y,r*0.9,0,360*Math.PI/180,false);
                oGc.closePath();
                oGc.fill();

                // 画时针
                oGc.lineWidth = 5;
                oGc.beginPath();
                oGc.moveTo(x,y);
                // 起始位置和终止位置都为0,相当于一个点,closePath就变成了线。
                oGc.arc(x,y,r*0.5,oHoursValue,oHoursValue,false);
                oGc.closePath();
                oGc.stroke();

                // 画分针
                oGc.lineWidth = 3;
                oGc.beginPath();
                oGc.moveTo(x,y);
                // 起始位置和终止位置都为0,相当于一个点,closePath就变成了线。
                oGc.arc(x,y,r*0.7,oMinValue,oMinValue,false);
                oGc.closePath();
                oGc.stroke();

                // 画秒针
                oGc.lineWidth = 1;
                oGc.beginPath();
                oGc.moveTo(x,y);
                // 起始位置和终止位置都为0,相当于一个点,closePath就变成了线。
                oGc.arc(x,y,r*0.95,oSecValue,oSecValue,false);
                oGc.closePath();
                oGc.stroke();
            }
            setInterval(toDraw,1000);
            toDraw();
        }
    </script>
</head>
<body>
    <canvas id="c1" width="400px" height="400px;">
    </canvas>
</body>
</html>
 
 

 

arcTo(150,20,150,70,50):创建弧度(此圆弧与当前点到(x1,y1)的连线相切,而且(x1,y1)到(x2,y2)的连线也相切)
例子:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>画圆</title>
    <style type="text/css">
        body{background: #000;}
        #c1{background: #fff;}
    </style>
    <script type="text/javascript">
        window.onload = function(){
            var oC = document.querySelector('#c1');
            var oGc = oC.getContext('2d');
            oGc.moveTo(20,20);
            oGc.lineTo(100,20);
            oGc.arcTo(150,20,150,70,50);//x1,y1,x2,y2,r
            oGc.lineTo(150,120);
            oGc.stroke();
        }
    </script>
</head>
<body>
    
    <canvas id="c1" width="400px" height="400px;">
        
    </canvas>
</body>
</html>

quadraticCurveTo(x1,y1,x2,y2):创建二次贝塞尔曲线

bezierCurveTo(dx1,dy1,dx2,dy2,x1,y1):创建三次贝塞尔曲线

更多关于canvas的参考手册请参考:http://www.w3school.com.cn/tags/html_ref_canvas.asp

 

旋转的方块代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
body{ background:black;}
#c1{ background:white;}
</style>
<script>
window.onload = function(){
    var oC = document.getElementById('c1');
    var oGC = oC.getContext('2d');
    var num = 0;
    var num2 = 0;
    var value = 1;
    setInterval(function(){
        num++;    
        oGC.save();    
        oGC.clearRect(0,0,oC.width,oC.height);    
        oGC.translate(100,100);    
        if(num2 == 100){
            value = -1;
        }
        else if(num2 == 0){
            value = 1;
        }    
        num2 += value;    
        oGC.scale( num2*1/50,num2*1/50 );    
        oGC.rotate(num*Math.PI/180);    
        oGC.translate(-50,-50);    
        oGC.fillRect(0,0,100,100);    
        oGC.restore();  
    },30);
    
};
</script>
</head>
<body>
<canvas id="c1" width="400" height="400"></canvas>
</body>
</html>

 

简易版祖玛小游戏代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
*{ margin:0; padding:0;}
body{ background:black;}
#div1{ background:white; width:600px; margin:20px auto;}
</style>
<script>
window.onload = function(){
    var oC = document.getElementById('c1');
    var oGC = oC.getContext('2d');
    
    var i = 0;
    
    var yImg = new Image();
    
    yImg.src = 'person.png';
    
    yImg.onload = function(){
        
        setInterval(function(){
        
            oGC.clearRect(0,0,oC.width,oC.height);
            
            oGC.beginPath();
            //弧度 = 角度 * Math.PI/180
            oGC.arc(300,200,200,-90*Math.PI/180,180*Math.PI/180,false);
            oGC.stroke();
            
            oGC.beginPath();
            oGC.arc(250,200,150,180*Math.PI/180,360*Math.PI/180,false);
            oGC.stroke();
            oGC.beginPath();
            oGC.arc(400,200,20,0*Math.PI/180,360*Math.PI/180,false);
            oGC.stroke();
            
            for(var i=0;i<ball.length;i++){
                
                oGC.beginPath();
                oGC.moveTo(ball[i].x,ball[i].y);
                oGC.arc(ball[i].x,ball[i].y,20,0*Math.PI/180,360*Math.PI/180,false);
                oGC.fill();
            }
            
            oGC.save();
            oGC.translate(300,200);
            oGC.rotate(iRotate);
            oGC.translate(-40,-40);
            oGC.drawImage(yImg,0,0);
            oGC.restore();
            
            for(var i=0;i<bullet.length;i++){
                
                oGC.save();
                oGC.fillStyle = 'red';
                oGC.beginPath();
                oGC.moveTo(bullet[i].x,bullet[i].y);
                oGC.arc(bullet[i].x,bullet[i].y,20,0*Math.PI/180,360*Math.PI/180,false);
                oGC.fill();
                oGC.restore();
            }
            
            oGC.save();
            oGC.font = '60px impact';
            oGC.textBaseline = 'top';
            oGC.fillStyle = 'red';
            oGC.shadowOffsetX = 10;
            oGC.shadowOffsetY = 10;
            oGC.shadowColor = 'green';
            oGC.shadowBlur = 5;
            var w = oGC.measureText('简易祖玛').width;
            var h = 60;
            oGC.fillText('简易祖玛', (oC.width - w)/2 , 450 );
            oGC.restore();
            
            
        },1000/60);
        
        setInterval(function(){
            
            for(var i=0;i<ball.length;i++){
                
                ball[i].num++;
                
                if( ball[i].num == 270 ){
                    ball[i].r = 150;
                    ball[i].startX = 250;
                    ball[i].startY = 50;
                }
                
                if( ball[i].num == 270 + 180 ){
                    alert('游戏结束');
                    window.location.reload();
                }
                
                ball[i].x = Math.sin(ball[i].num*Math.PI/180) * ball[i].r + ball[i].startX;
                ball[i].y = ball[i].r - Math.cos(ball[i].num*Math.PI/180) * ball[i].r + ball[i].startY;
                
            }
            
            for(var i=0;i<bullet.length;i++){
                bullet[i].x = bullet[i].x + bullet[i].sX;
                bullet[i].y = bullet[i].y + bullet[i].sY;
            }
            
            for(var i=0;i<bullet.length;i++){
                
                for(var j=0;j<ball.length;j++){
                    
                    if( pz(bullet[i].x,bullet[i].y,ball[j].x,ball[j].y) ){
                        
                        bullet.splice(i,1);
                        ball.splice(j,1);
                        break;
                        
                    }
                    
                }
                
            }
            
        },30);
        
        var ball = [];
        
        setInterval(function(){
            
            ball.push({
                x : 300,
                y : 0,
                r : 200,
                num : 0,
                startX : 300,
                startY : 0
            });
            
        },350);
        
        var iRotate = 0;
        
        oC.onmousemove = function(ev){
            var ev = ev || window.event;
            
            var x = ev.clientX - oC.offsetLeft;
            var y = ev.clientY - oC.offsetTop;
            
            var a = x - 300;
            var b = y - 200;
            
            var c = Math.sqrt(a*a + b*b);
            
            if(a>0 && b>0){
                iRotate = Math.asin(b/c) + 90*Math.PI/180;
            }
            else if(a>0){
                iRotate = Math.asin(a/c);
            }
            
            if(a<0 && b>0){
                iRotate = -(Math.asin(b/c) + 90*Math.PI/180);
            }
            else if(a<0){
                iRotate = Math.asin(a/c);
            }
            
        };
        
        var bullet = [];
        
        oC.onmousedown = function(ev){
            var ev = ev || window.event;
            
            var x = ev.clientX - oC.offsetLeft;
            var y = ev.clientY - oC.offsetTop;
            
            var a = x - 300;
            var b = y - 200;
            
            var c = Math.sqrt(a*a + b*b);
            
            var speed = 5;
            
            var sX = speed * a/c;
            var sY = speed * b/c;
            
            bullet.push({
                x : 300,
                y : 200,
                sX : sX,
                sY : sY
            });
            
        };
        
    };
    
    function pz(x1,y1,x2,y2){
        
        var a = x1 - x2;
        var b = y1 - y2;
        
        var c = Math.sqrt(a*a + b*b);
        
        if(c < 40){
            return true;
        }
        else{
            return false;
        }
        
    }
    
};
</script>
</head>
<body>
<div id="div1">
    <canvas id="c1" width="600" height="600"></canvas>
</div>
</body>
</html>

 

<ifram></ifram>:窗口之间的访问。

举例:如何操作引入的ifram下的页面的dom元素:采用oMyIfram.contentWindow,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload = function(){
            var oBtn = document.querySelector('#btn1');
            var oMyIfram = document.querySelector('#myifram');

            oBtn.onclick = function(){
                // 操作ifram下的dom元素,需要先获得引入页面下的window。使用以下方法。
                oMyIfram.contentWindow.document.body.style.background = '#f00'
            }
        }
    </script>
</head>
<body>
    <input type="button" id="btn1" name="" value="改变颜色">
    <iframe id="myifram" src="12ifram.html"></iframe>
    <iframe id="myifram" src="https://www.baidu.com"></iframe>
</body>
</html>

 

————在JS中采用window.open()方法,也可以同时操作新窗口的DOM元素。

————请注意:以上的是同一个域名下操作不同窗口的,是可以的,但是在不同域名下(即跨域),是无法操作的。也就是你的权限限制在了oMyIfram.contentWindow,之下的document以及之下的权限是没有的。那么这个时候就可以用postMessage去操作,这时候相当于是把信息传了过去,然后对方接受并进行操作。

以下供参考:

 

 ajax部分:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

————————————————这是占位的。

 

转载于:https://www.cnblogs.com/windyet/articles/6736388.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值