HTML5--新增元素音频/视频(6)

摘要:
buttonclick=“operation()”>audioid=“audio”src=“./1.mp3”控件>

前言:

  这节课主要学习HTML5中新增的audio和video元素。

  1.audio元素

    作用:为html提供了播放音频文件的标准。

    属性:

      controls

        controls属性为audio控件提供了播放、暂停、音量调节等功能。

      autoplay:

        设置音频自动播放,音频在就绪后马上播放。

      loop:

        每当音频结束后,就重新开始播放。

      muted:

        规定音频的输出应该被静音。

      preload:

        规定视频在页面加载时进行加载,并预备播放,如果使用 "autoplay",则忽略该属性。

    source标签:

      包裹在audio元素中,可以定义多种音频格式资源。

    audio对象示例

<body>
    <button onclick="operation()">播放/暂停</button>
    <!-- 当浏览器不支持audio标签时,就会显示其中的文字 -->
    <audio id="audio" src="./1.mp3" controls>你的浏览器不支持此标签</audio>

    <script>
        var audio = document.getElementById('audio')
        function operation(){
            //通过paused判断当前音频是否暂停
            if (audio.paused) {
                //使用play()方法进行播放
                audio.play()
            } else {
                //使用pause()方法进行暂停
                audio.pause()
            }
        }
    </script>
</body>

  

  2.video元素

    作用:为html提供了播放视频文件的标准。

    属性除过audio中的属性

      width/height:

        为video元素设置宽和高

      poster:

        规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。

    source标签:

      包裹在video元素中,可以定义多种视频格式资源。

    注意事项:
             视频始终会保持原始的宽高比,如果同时设置宽高,并不是真正的将视频的画面设置为指定的大小,而只是将视频的占据区域设置为指定大小,除非设置的宽高刚好就是原始的宽高比。
               建议:设置宽、高时,只设置宽或者只设置高,让视频文件自动所缩放。

    video对象示例

<body>
    <button onclick="operation()">播放/暂停</button>
    <button onclick="big(this)">最大化</button>
    <button onclick="small(this)">最小化</button>
    <!-- 当浏览器不支持audio标签时,就会显示其中的文字 -->
    <video id="video" controls>
        <source src="./1.mp4">
        <source src="./1.avi">
        你的浏览器不支持此标签</video>

    <script>
        var video = document.getElementById('video')
        // 操作video标签的播放和暂停
        function operation(){
            //通过paused判断当前视频是否暂停
            if (video.paused) {
                //使用play()方法进行播放
                video.play()
            } else {
                //使用pause()方法进行暂停
                video.pause()
            }
        }
        //video标签的最大化
        function big(v){
            v.width = 800
            v.height = 800
        }
        //video标签的最小化
        function small(v){
            v.width = 300
            v.height = 300
        }
    </script>
</body>

   3.多媒体元素常用API

    注意:jquery没有提供对多媒体播放控件的方式,如果要操作多媒体播放,必须使用原生js

    1>常用方法:load() 加载、play() 播放、pause() 暂停

    2>常用属性

      i:currentTime  多媒体当前播放的进度。

      ii:duration 多媒体的总时长。

      iii:paused 多媒体播放的状态。

    3>常用事件

      i:oncanplay 事件在用户可以开始播放多媒体时触发。

      ii:ontimeupdate 通过该事件来报告当前的播放进度

      iii:onended 播放完时触发。

    举例:手动实现多媒体,不同浏览器播放器的控制面板显示不一样,这里我们手动实现。

    第一步:布局结构和样式(html,css)

    播放器布局结构

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 使用了字体图标 -->
    <link rel="stylesheet" href="../css/font-awesome.css">
    <!-- 引入外部css文件 -->
    <link rel="stylesheet" href="../css/css.css">
</head>

<body>
    <h3 class="playerTitle">视频播放器</h3>
    <div class="player">
        <video src="../mp4/chrome.mp4" id="video"></video>
        <div class="controls" id="controls">
            <a href="javascript:;" class="switch fa fa-play"></a>
            <a href="javascript:;" class="expand fa fa-expand" id="fullScreen"></a>
            <div class="progress">
                <div class="bar"></div>
                <div class="loaded"></div>
                <div class="elapse"></div>
            </div>
            <div class="time">
                <span class="currentTime">00:00:00</span>
                
                <span class="totalTime">00:00:00</span>
            </div>
        </div>
    </div>
</body>

    css样式

body {
    padding: 0;
    margin: 0;
    font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, sans-serif;
    background-color: #F7F7F7;
}
a {
    text-decoration: none;
}
.playerTitle{
    width:100%;
    margin: 0 auto;
    line-height:100px;
    font-size: 40px;
    text-align: center;
}
.player{
    width: 720px;
    height: 360px;
    margin: 0 auto;
    background: url("../images/loading.gif") center no-repeat;
    background-size: cover;
    position: relative;
}
video{
    height:100%;
    margin: 0 auto;
    display: none;
}
.controls {
    width: 720px;
    height: 40px;
    position: absolute;
    left: 0px;
    bottom: -40px;
    background-color: #000;
}
.controls > .switch{
    width: 20px;
    height: 20px;
    display: block;
    font-size: 20px;
    color: #fff;
    position: absolute;
    left: 10px;
    top: 10px;
}
.controls > .expand{
    width: 20px;
    height: 20px;
    display: block;
    font-size: 20px;
    color: #fff;
    position: absolute;
    right: 10px;
    top: 10px;
}
.controls > .progress{
    width: 430px;
    height: 10px;
    position: absolute;
    left:40px;
    bottom:15px;
    background-color: #555;
}
.controls > .progress > .bar{
    width:100%;
    height:100%;
    border-radius: 3px;
    cursor: pointer;
    position: absolute;
    left: 0;
    top: 0;
    opacity: 0;
    z-index: 999;
}
.controls > .progress > .loaded{
    width:60%;
    height:100%;
    background-color: #999;
    border-radius: 3px;
    position: absolute;
    left: 0;
    top: 0;
    z-index: 2;
}
.controls > .progress > .elapse{
    width:0%;
    height:100%;
    background-color: #fff;
    border-radius: 3px;
    position: absolute;
    left: 0;
    top: 0;
    z-index: 3;
}
.controls > .time{
    height: 20px;
    position: absolute;
    left:490px;
    top: 10px;
    color: #fff;
    font-size: 14px;
}

    第二部:功能实现(JavaScript)

<script src="http://t.zoukankan.com/js/jquery.min.js"></script>
    <script>
        /*通过jq来实现功能*/
        $(function () {
            /*1.获取播放器*/
            var video = $("video")[0];
            /*2.实现播放与暂停*/
            $(".switch").click(function () {
                /*实现播放与暂停的切换:如果是暂停>>播放  ,如果是播放 >> 暂停*/
                if (video.paused) {
                    video.play();
                    /*移除暂停样式,添加播放样式*/
                } else {
                    video.pause();
                    /*移除播放样式,添加暂停样式*/
                }
                /*设置标签的样式  fa-pause:暂停   fa-play:播放*/
                $(this).toggleClass("fa-play fa-pause");
            });
            /*3.实现全屏操作*/
            $(".expand").click(function () {
                /*全屏>>不同浏览器需要添加不同的前缀>>能力测试*/
                if (video.requestFullScreen) {
                    video.requestFullScreen();
                } else if (video.webkitRequestFullScreen) {
                    video.webkitRequestFullScreen();
                } else if (video.mozRequestFullScreen) {
                    video.mozRequestFullScreen();
                } else if (video.msRequestFullScreen) {
                    video.msRequestFullScreen();
                }
            });
            /*4.实现播放业务逻辑:当视频文件可以播放时触发下面的事件*/
            video.oncanplay = function () {
                setTimeout(function () {
                    /*1.将视频文件设置为显示*/
                    video.style.display = "block";
                    /*2.获取当前视频文件的总时长(以秒做为单位,同时获取了小数值),计算出时分秒*/
                    var total = video.duration; //01:01:40   00:00:36
                    /*3.将计算结果展示在指定的dom元素中*/
                    $(".totalTime").html(result);
                }, 2000);
            }
            /*通过总时长计算出时分秒*/
            function getResult(time) {
                var hour = Math.floor(time / 3600);
                /*补0操作*/
                hour = hour < 10 ? "0" + hour : hour;
                var minute = Math.floor(time % 3600 / 60);
                minute = minute < 10 ? "0" + minute : minute;
                var second = Math.floor(time % 60);
                second = second < 10 ? "0" + second : second;
                /*返回结果*/
                return hour + ":" + minute + ":" + second;
            }
            /*5.实现播放过程中的业务逻辑,当视频播放时会触发ontimeupdate事件
             * 如果修改currentTime值也会触发这个事件,说白了,只要currenTime值变化,就会触发这个事件*/
            video.ontimeupdate = function () {
                /*1.获取当前的播放时间*/
                var current = video.currentTime;
                /*2.计算出时分秒*/
                var result = getResult(current);
                /*3.将结果展示在指定的dom元素中*/
                $(".currentTime").html(result);
                /*4.设置当前播放进度条样式  0.12>>0.12*100=12+%>12%*/
                var percent = current / video.duration * 100 + "%";
                $(".elapse").css("width", percent);
            }
            /*6.实现视频的跳播*/
            $(".bar").click(function (e) {
                /*1.获取当前鼠标相对于父元素的left值--偏移值*/
                var offset = e.offsetX;
                /*2.计算偏移值相对总父元素总宽度的比例*/
                var percent = offset / $(this).width();
                /*3.计算这个位置对应的视频进度值*/
                var current = percent * video.duration;
                /*4.设置当前视频的currentTime*/
                video.currentTime = current;
            });
            /*7.播放完毕之后,重置播放器的状态*/
            video.onended = function () {
                video.currentTime = 0;
                $(".switch").removeClass("fa-pause").addClass("fa-play");
            }
        });
    </script>

  总结:我们可以选择多媒体提供的controls控制面板,也可以使用多媒体提供的API手动实现。

    

免责声明:文章转载自《HTML5--新增元素音频/视频(6)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RabbitMQ 的配置文件Unity3D中使用Mesh动态创建编辑轴(点,线,圆,圆锥)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue跨层级传递slot的方法

因为业务需要,我们的vue组件分了很多层。但我需要在父组件通过slot指定模板,但不在子组件渲染,而是在孙组件或是再下方的组件去渲染。 比如,我有一个通用的A组件,A组件内引用了B组件,B组件又引用了C组件。C组件的模板内有一部分是需要在A组件中来配置的。 因为中间间隔了1层以上的组件,所以没法通过一般的slot方式解决。于是研究了一下vue的scoped...

struts2入门

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />     学习一门新技术,最好是先看到实际的效果,所以接下来的几篇文章里,我们就来个先睹为快,看看Struts2的边边角角到底是怎么使用的,等我们有了一定的作战经验,再来透彻地分析它的运行原理。...

discuz(dz) SSO(单点,同歩,异步)登录 --转

原文地址:http://fc-lamp.blog.163.com/blog/static/1745666872012762520123/ discuz(dz) SSO(单点,同歩,异步)登录  一般流程:   1 发起请求:   1 )登录请求到 localhost/member.php  初始化一些设置,然后调用source/module/member/...

ros自定义消息的时候报错ImportError: No module named em

Traceback (most recent call last):  File "/opt/ros/kinetic/share/gencpp/cmake/../../../lib/gencpp/gen_cpp.py", line 41, in <module>    import genmsg.template_tools  File "/o...

vue3逻辑分离和页面快速展示数据

逻辑分层 我们在使用vue3开发项目的时候, 如何进行【区域分层】呢???? 举一个简单的小粒子 一个区域有【查询逻辑、修改后的保存逻辑、新增逻辑、删除逻辑】 这个页面可能还有其他的区域。A区域、B区域,C区域...【有很多逻辑】 这个时候我们可以将一个区域的逻辑分离出去 将各个区域业务分开 export default { setup () {...

手把手写一个html_json信息源

html_json用于从网页里提取json数据。 这里用新浪读书的书讯举个例子,手把手写一个html_json信息源。 打开新浪读书的首页,可以看到页面下方有最新、书讯、童书、小说等几个Tab,这里我们提取书讯的内容。 查看页面的源码,找不到书讯的内容。 这是因为网站使用了json技术:额外加载了json对象、并通过javascript把json的内容显...