【html5总结】第二部分——功能类元素及所属API

这里区分了功能类的(这个分类只是我自己分的,千万不要以为事官方定义),是因为我认为这些标签具有特别的功能,或者十分重要。说实话,语义标签里面,因为带有默认样式的缘故,很多元素的实用性其实并不高(不同浏览器的默认样式不同)。所以这一章我单独分开了一些元素,以及他们提供的API,写在这里。

媒介元素

音视频元素audio/video

这里主要写两个元素,audio和video,可能会有人说,还有一个embed呢,首先embed我没有用过,其次在网上浏览的时候,看到一个总结object和embed的帖子,大意就是embed无法动态渲染,这也就是说无法使用jq进行dom操作(要了老命了),所以这里只说audio和video。


HTML5 Audio/Video 方法

canPlayType() 检测是否能播放,返回三个值:

   "probably" - 浏览器最可能支持该音频/视频类型

   "maybe" - 浏览器也许支持该音频/视频类型

   "" - (空字符串)浏览器不支持该音频/视频类型

load() 重新加载音视频

play()  播放音视频

pause()  暂停音视频

HTML5 Audio/Video 属性

autoplay 设置或返回是否在加载完成后随即播放音频/视频

currentSrc 返回当前音频/视频的 URL

currentTime 设置或返回音频/视频中的当前播放位置(以秒计)

defaultMuted 设置或返回音频/视频默认是否静音

defaultPlaybackrate 设置或返回音频/视频的默认播放速度

duration 返回当前音频/视频的长度(以秒计)

ended 返回音频/视频的播放是否已结束

loop 设置或返回音频/视频是否应在结束时重新播放

paused 设置或返回音频/视频是否暂停

seeking 返回用户是否正在音频/视频中进行查找。该属性返回用户目前是否在音频/视频中寻址。寻址中(Seeking)指的是用户在音频/视频中移动/跳跃到新的位置。

volume 设置或返回音频/视频的音量


HTML5 Audio/Video 事件

abort 当音频/视频的加载已放弃时

canplay 当浏览器可以播放音频/视频时

emptied 当目前的播放列表为空时

ended 当目前的播放列表已结束时

pause 当音频/视频已暂停时

play 当音频/视频已开始或不再暂停时

playing 当音频/视频在已因缓冲而暂停或停止后已就绪时

progress 当浏览器正在下载音频/视频时

timeupdate 当目前的播放位置已更改时。监听音频文件的播放(只要音频在播放,就会执行这个事件)

其中没有的是我认为没啥大用或者还没有遇到的方法,加粗的是我目前用过并会频繁用到的方法事件属性。



画布元素

canvas

个人认为h5中最重要的东西,可以做的东西太多了,这里只写一些常规用法,关于一些案例的实现会另开一个一篇文章写。

画布标签,可以理解为是在页面设置一块画布,然后可以在该区域设置绘制图形(通过JavaScript控制)

 <canvas id="canvas">

如果浏览器不支持画布标签,那么请换一个浏览器查看效果!

</canvas> 

一、简单绘制一条线:

步骤:

1.获取画布标签

2.设置画布尺寸

3.获取画笔(绘图的上下文对象)

4.设置画笔颜色

5.设置画笔粗细(宽度)

6.设置起点

7.设置下一个点

8.描线

代码实现:

又粘贴不了。。

二、绘制两条线

步骤:

1.获取画布标签

2.设置画布尺寸

3.获取画笔(绘图的上下文对象)

4.调用开始绘制方法(由画笔对象调用)

5.设置画笔颜色

6.设置画笔粗细(宽度)

7.设置起点

8.设置下一个点

9.描线

10.闭合路径(首位相连)

11.绘制另一条线(重复4-10)

代码:

var canvas = document.querySelector(".canvas")

        // console.log(canvas);

        canvas.width = 500

        canvas.height = 200

        // 获取画布内容

        var pen = canvas.getContext("2d")

        pen.beginPath();

        // 设置笔触

        pen.strokeStyle = "red";

        // 设置线宽

        pen.lineWidth = 5;

        // 设置线的起点

        pen.moveTo(0,0);

        // 设置线的终点

        pen.lineTo(100,0);

        // 绘制线 绘制已定义的路线

        pen.stroke();

        // 绘制第二条线

        pen.beginPath();

        // 设置笔触

        pen.strokeStyle = "green";

        // 设置线宽

        pen.lineWidth = 5;

        // 设置线的起点

        pen.moveTo(0,100);

        // 设置线的终点

        pen.lineTo(200,100);

        // 绘制线 绘制已定义的路线

        pen.stroke();

三、绘制三角形

                // 开始绘制路径

pen.beginPath();

// 设置填充的颜色

pen.fillStyle="red";

// 设置线的颜色

pen.strokeStyle = "blue";

// 设置线的大小

pen.lineWidth = 5;

// 绘制起点

pen.moveTo(200,150);

// 绘制下一个点

pen.lineTo(400,300);

// 绘制下一个点

pen.lineTo(50,300);

// 绘制下一个点

pen.lineTo(200,150);

// 描边(给线上颜色的意思)

pen.stroke();

// 填充 (给图形上颜色)

pen.fill();

// 结束绘制路径

pen.closePath();

四、绘制矩形

var demo = document.querySelector("canvas")

        demo.width = 500

        demo.height = 500

        var pen = demo.getContext("2d");

        pen.beginPath();

        pen.fillStyle = "red";

        pen.rect(50,50,200,200);

        // pen.fillRect();

        pen.closePath();

        pen.fill();

这个是我测试用的代码,其实可以用pen.fillRect()直接做一个出来哈

五、绘制弧形/圆形

                pen.beginPath();

            pen.lineWidth = 5;

            pen.strokeStyle = "red";

            // 计算弧度的公式 (记忆)

            // 弧度 = 角度 * Math.PI / 180

            // 30°C 对应的弧度是多少

            // var rad =  90 * Math.PI / 180 ;

            // 调用绘制弧形的方法

            // pen.arc(x,y,r,s,e,boolean)

            // pen.arc(x坐标,y坐标,半径,开始弧度,结束弧度,布尔值);

            pen.arc(

                200,

                200,

                100,

                0 * Math.PI / 180,

                90 * Math.PI / 180,

                false

            )

            pen.stroke();

            pen.closePath();

                  // 绘制扇形(圆形)

            pen.beginPath();

            pen.strokeStyle = "green";

            pen.fillStyle="blue";

            pen.lineWidth = 5;

            pen.moveTo(200,200);

            pen.arc(

                200,

                200,

                80,

                0 * Math.PI / 180,

                180 * Math.PI / 180,

                false

            )

            // pen.lineTo(200,200);

            // 结束绘制路径(闭合路径)

            pen.closePath();

            pen.stroke();

            pen.fill();

六、图片剪裁

                img.onload = function(){

            pen.drawImage(

                img,

                50,

                150,

                450,

                300,

                100,

                100,

                450 * (1 / 2),

                300 * (1 / 2)

            )

        }

                // 加载图片

        // pen.drawImage(

        //     img,  // 图片资源

        //     sx,   // 图片上的x坐标位置(裁剪的x坐标)

        //     sy,   // 图片上的y坐标位置(裁剪的y坐标)

        //     sw,   // 在图片上的宽度(裁剪的宽度)

        //     sh,   // 在图片上的高度(裁剪的高度)

        //     x,    // 画布上的x坐标位置

        //     y,    // 画布上的y坐标位置

        //     w,    // 在画布上显示出来的宽度

        //     h     // 在画布上显示出来的高度

        // )

这里九个参数哈。。

七、执行动画(固定60帧)

                var move =  function(){

            // 设置盒子的宽度

            box.style.width = box.offsetWidth  + 10 +"px";

            // 满足这个条件执行

            if(box.offsetWidth < 1000){

                // 每1秒执行60次move函数

                dd = window.requestAnimationFrame(move);

                // console.log(dd);

            }

        }

        // 事件绑定

        // btn.onclick = function(){move()};

        // 执行动画

        btn1.onclick = move;

        // 取消动画

        btn2.onclick = function(){

            // console.log('test');

             // 取消执行动画

             window.cancelAnimationFrame(dd);

        }  

八、绘制文本

                pen.beginPath();

    pen.strokeStyle = "#000";

    pen.fillStyle = "green";

    // 设置字体属性

    // pen.font = "40px Wingdings";

    pen.font = "40px 微软雅黑";

    // 设置文本水平对齐 left right center

    pen.textAlign = "center";

    // 设置文本垂直对齐 top bottom middle

    pen.textBaseline = "middle";

    // console.log(pen);

    // 文本描边

    pen.strokeText(

        "abc",

        point.x,

        point.y

    )

    // 文本填充

    pen.fillText(

        "abc",

        point.x,

        point.y

    )

    pen.closePath();

九、清除画布

                // 擦除画布指定位置,指定尺寸的区域

    ctx.clearRect(60,60,100,200);


十、总结

总之就是各类型的api,我这里为了清晰,用x-mind做了个框架哈,放图在下面



p.s.如果画布的子路径是打开的,closePath() 通过添加一条线条连接当前点和子路径起始点来关闭它。如果子路径已经闭合了,这个方法不做任何事情。一旦子路径闭合,就不能再为其添加更多的直线或曲线了。

这里再补充一下,如果没有beginPath()方法,再下一次绘制中如果使用stroke(),那么会将两次绘制中的路径全部连接

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 html5Canvas的知识点,是开发的必备技能,在实际工作中也常常会涉及到。 最近熬夜总结html5Can...
    Afine_4d71阅读 3,984评论 0 0
  • 一、Canvas Canvas本质上是一个位图画步。 fillStyle:"#000000" 填充...
    栀子花wish阅读 3,301评论 0 0
  • 转载请声明 原文链接 关注公众号获取更多资讯 这篇文章主要总结H5的一些新增的功能以及一些基础归纳,这里只是一个提...
    前端进阶之旅阅读 12,964评论 22 225
  • 一、Web时代的变迁 二、HTML5与HTML4的区别 1.新增的元素:section、article、aside...
    ZyBlog阅读 3,790评论 0 0
  • 一、什么是 HTML5? HTML5 是最新的 HTML 标准; HTML5 是专门为承载丰富的 web 内容而设...
    暖A暖阅读 5,673评论 0 2