前言:
这节课主要学习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="../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手动实现。