HTML5——多媒体:audio音频、video视频
1. audio音频标签、video视频标签
2. 特性:
(1)autoplay:自动播放;注意:在谷歌浏览器中autoplay有时会失效(其他浏览器没有测试),不知道为什么
(2)controls:显示控件
(3)preload(none、metadata、auto):预加载
none:不需要预加载;metadata:元数据,比如:时长,比特率,帧大小;auto:浏览器根据自身情况自行加载媒体内容
(4)loop:循环播放
(5)poster(video标签独有属性):poster 属性规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。如果未设置该属性,则使用视频的第一帧来代替。
当视频文件不可以用时,用一张图片代替,否则是空白;同时也是视频封面;
当视频出问题时:
当视频封面时:
注意:有的移动设备无法加载poster的图片,导致封面黑屏,处理方法:将视频的开头截图,作为封面。
- 多类型资源
加载音频的另一种方式,type会让浏览器更快识别audio标签内的资源类型,source是加载资源,mp3格式优先加载,若MP3格式无法加载时,再加载ogg格式的音频
4. 脚本化
(1)获取dom元素
(2)创建dom元素
audio标签可以通过Audio对象来创建,而video标签没有对象
(3)脚本化中属性的赋值
注意:(1)这里的属性赋值有两种方式
(2)audio和video没有onload事件,所以用window的onload事件。
<script>
var audio = new Audio();
var video = document.createElement('video');
audio.src = './audio.mp3';
audio.autoplay = true;
audio.controls = true;
audio.loop = true;
audio.preload = 'auto';
video.src = './video.mp4';
video.controls = 'controls';
video.autoplay = 'autoplay';
video.loop = 'loop';
video.preload = 'auto';
video.poster = './cover.jpeg';
window.onload = function(){
console.log(video);
video.style.width = '300px';
video.style.height = '400px';
document.body.appendChild(video);
document.body.appendChild(audio);
}
</script>
5. 方法:(audio和video都有)
(1)play():播放
(2)pause():暂停播放
(3)load():重置资源,重新加载资源
<body>
<audio id="audio1" controls>
<source src="./audio.mp3" type="audio/mpeg">父亲写的散文诗
<source src="./audio.ogg" type="audio/ogg">神话
</audio>
<button id="playBtn">播放</button>
<button id="pauseBtn">暂停</button>
<button id="loadBtn">重置</button>
<script>
var audio = document.getElementById('audio1');
playBtn.onclick = function(){
audio.play();
}
pauseBtn.onclick = function(){
audio.pause();
}
loadBtn.onclick = function(){
audio.load();//重新加载音频、视频资源
}
</script>
</body>
(4)canPlayType()方法:判断该标签在浏览器中是否支持某个格式
6. 属性(audio和video都有)
(1)volume音量属性
范围:0~1之间,默认是1;
(2)静音属性:muted,若是true,表示静音;若是false,恢复到之间的音量。
<audio id="audio1" controls>
<source src="./audio.mp3" type="audio/mpeg">父亲写的散文诗
<source src="./audio.ogg" type="audio/ogg">神话
</audio>
<button id="addVolume">音量+</button>
<button id="reduceVolume">音量-</button>
<button id="mute">静音</button>
<script>
var audio = document.getElementById('audio1');
var volume = audio.volume; //让volume的值 == 音量的值,但是不是设置音量值。
volume = Math.round(volume * 10);
addVolume.onclick = function () {
if (volume == 10) {
return //当音量=1的时候,该函数无效。
}
volume += 1;
audio.volume = volume / 10; //音量设置值
}
reduceVolume.onclick = function () {
if (volume >= 1) {
volume -= 1;
} else {
volume = 0;
}
audio.volume = volume / 10; //音量设置值
}
var count = 0;
mute.onclick = function () {
count++;
if (count % 2 == 1) {
audio.muted = true; //静音
} else {
audio.muted = false; //取消静音
}
}
</script>
注意:音量的加减会出现不精准的情况
注意:音量设置值:audio.volume = volume / 10; //音量设置值
注意:var volume = audio.volume; //让volume的值 == 音量的值,但是不是设置音量值。
注意:音量+ 和音量- 采用了不同的方法。
(3)playbackRate属性:播放速率
该属性值为1.0表示正常播放速率,大于1则表示“快进”,0~1之间表示“慢放”,每个浏览器实现时会有差别。
<body>
<audio id="audio1" controls>
<source src="./audio.mp3" type="audio/mpeg">父亲写的散文诗
<source src="./audio.ogg" type="audio/ogg">神话
</audio>
<button id="addPlayRate">速率+</button>
<button id="reducePlayRate">速率-</button>
<script>
var audio = document.getElementById('audio1');
addPlayRate.onclick = function(){
audio.playbackRate += 0.1;
console.log(audio.playbackRate);
}
reducePlayRate.onclick = function(){
audio.playbackRate -= 0.1;
console.log(audio.playbackRate);
}
</script>
</body>
js在计算上会出现小数点的不精准,playbackRate的计算:
(4)currentTime:设置或获取音频、视频播放的当前位置,可以设置当前播放时间,也可以获取当前播放时间;单位:秒
<body>
<audio id="audio1" controls>
<source src="./audio.mp3" type="audio/mpeg">父亲写的散文诗
<source src="./audio.ogg" type="audio/ogg">神话
</audio>
<button id="addCurrentTime">时间+</button>
<button id="reduceCurrentTime">时间-</button>
<script>
var audio = document.getElementById('audio1');
addCurrentTime.onclick = function(){
audio.currentTime += 5;
console.log(audio.currentTime);
}
reduceCurrentTime.onclick = function(){
audio.currentTime -= 5;
console.log(audio.currentTime);
}
</script>
</body>
(5)duration:返回当前音频、视频的总时长,单位:秒
(6)played、buffered、seekable
played属性:返回已经播放(看过)的时间段;用户看过的时间段,比如用户跳着看,返回用户看过(播放过)的所有时间段。
返回一个TimeRanges对象:属性length:共有几段;原型上有几个方法:start方法:第n段开始的时间;end方法:第n段结束的时间;单位是秒,起始参数是0。
buffered属性:返回当前已经缓冲的时间段,缓存进度条
返回一个TimeRanges对象,和played的方法一样
seekable属性:返回用户可跳转的时间段
返回一个TimeRanges对象,和上面两个方法一样
(7)paused、seeking、ended属性:查询媒体播放状态
paused属性:值为true表示:暂停播放;false表示:在播放状态
实例:一个按钮控制播放和暂停:
seeking属性:播放器正在调到新的播放点,即用户正在拖动播放点时、seeking属性的值始终为true,若用户停止拖动,seeking属性的值为false。
如何监听这个拖动事件呢?
根据时间总长和当前时间的位置,定位小圆点的位置;反之,小圆点的位置,确定当前时间。
ended属性:如果播放器播放完,并且在音频、视频的末端停止了下来,此时的ended属性为true。
用处:提示重播或5秒后播放下一个
7. 事件
(1)play事件:当视频、音频在播放状态时,可以触发该事件
(2)pause事件:当视频、音频在暂停状态时,可以触发该事件
<script>
var audio = document.getElementById('audio1');
audio.onplay = function(){
console.log("正在播放...");
}
audio.onpause = function(){
console.log("暂停播放!!!");
}
</script>
(3)loadedmetadata事件:浏览器获取媒体元数据后触发
(4)loadeddata事件:浏览器加载完成当前帧数据,准备播放时触发(需要兼容IE8)
<script>
var audio = document.getElementById('audio1');
audio.onloadedmetadata = function(){
console.log("浏览器已获取该媒体的元数据");
}
audio.onloadeddata = function(){
console.log("浏览器已获取媒体数据");
}
</script>
注意:loadedmetadata事件先触发
(5)ended事件:当视频、音频播放完成后触发该事件
Media 事件
由媒介(比如视频、图像和音频)触发的事件(适用于所有 HTML 元素,但常见于媒介元素中,比如
还没有评论,来说两句吧...