文件日志地址 http://blog.csdn.net/q1056843325/article/details/60336226javascript
音频与视频如今已经变得愈来愈流行
各个网站为了保证跨浏览器的兼容性
仍然选择使用flashhtml
(源码截自优酷)html5
HTML5增长了audio与video两个多媒体标签
兼容性还不错,低版本IE不支持
可使咱们不须要使用任何浏览器插件就可以插入音频与视频控件
并且很是的简单java
(源码截自Bilibili)web
元素用法以下浏览器
<audio src="media/xi-Halcyon.mp3" id="demoAudio">不支持H5-audio</audio>
<video src="media/Animation.mp4" id="demoVideo">不支持H5-video</video>
标签中内容若是浏览器不支持该标签就会显示
固然使用这两个元素的时候
最起码要添加src属性,属性值就是资源的url缓存
可是每一个浏览器因为版权问题支持的媒体格式也不一样
因此就可使用下面的方式网络
<audio id="demoAudio"> <source src="media/xi-Halcyon.mp3"> <source src="media/xi-Halcyon.ogg"> ... 不支持H5-audio </audio> <video id="demoVideo"> <source src="media/Animation.mp4"> <source src="media/Animation.webm"> ... 不支持H5-video </video>
这样指定不一样的资源格式
也保证了各个浏览器的兼容性dom
audio和video标签除了src外
还有一些公有的属性ide
属性 | 描述 |
---|---|
autoplay | 设置该属性后,音/视频资源就绪后当即播放 |
controls | 设置该属性后,则显示浏览器播放控制控件 |
loop | 设置该属性后,则音/视频结束后从新循环开始播放 |
preload | 设置该属性后,则音/视频在页面加载时进行加载,并预备播放(使用autoplay会忽略该属性) |
前三个属性属性名与属性值相同,直接添加属性名便可
preload有以下属性值
好比想要在浏览器添加一段音乐
而且加载后当即播放,循环播放
使用浏览器的播放控件
<audio src="media/xi-Halcyon.mp3" id="demoVideo" autoplay controls loop></audio>
控件的样式各个浏览器都不同
随着浏览器版本的更新,可能还会更新样式
video元素还有独有的属性poster
属性值是图片资源的url
用来设置视频播放前的一张占位图片
<video src="media/Animation.mp4" id="demoVideo" width="500" height="400" poster="images/preimg.jpg" controls></video>
点击播放后,视频正常播放
使用js获取dom节点就很简单了
var a = document.getElementById('demoAudio');
var v = document.getElementById('demoVideo');
相似于image的Image构造函数
Audio也能够经过相似的方式建立(Video不能够)
区别在于Image建立的图片是要插入文档的
可是Audio不须要
var a = new Audio('song.mp3');
而后能够为它添加autoplay、loop等属性
而后添加到页面
在获取的DOM节点上可使用浏览器提供的接口属性和方法
经常使用的属性、方法以下
除此以外还有
它们都是TimeRanges对象
每一个对象都有一个length属性(表示当前时间段)
以及start()和end()方法(返回当前时间段的起始时间点和结束时间点,单位s)
start()和end()都有一个数字参数,表示第一个时间段
肯定当前缓存内容百分比:
var percentLoaded = Math.floor(song.buffered.end(0)/song.duration*100)
下面三个布尔属性表示媒体播放器的状态
并非全部浏览器都支持video和audio的全部编解码器
canPlayType()方法就是用来鉴定时候支持某一格式的媒体资源
返回字符串maybe、probably或空字符串
若是只传入MIME类型,则返回maybe
若是同时传入MIME类型和编解码器,则返回probably(可能性增长了)
只是由于媒体文件只不过是音/视频的容器
真正决定文件可否播放的还得是编码格式
console.log(a.canPlayType('audio/mp4')); //maybe
2 console.log(a.canPlayType('audio/mp4;codecs="mp4a.40.2"')); //probably
下面的状态位属性也了解一下
除了接口属性方法之外
还有必不可少的事件模型
若是咱们不想使用浏览器的控件而是定义本身的播放控制组件
就要使用这套事件了
初次以外还有不少事件
不少不经常使用
在w3c截了一张图
经过接口与事件
也能够简单的实现本身简陋的音乐播放器
<button id="btn">播放</button>
2 <span id="cur">0s</span>/<span id="dur">0s</span><br>
3 音量:<input type="range" id="vol">
var audio = new Audio('media/xi-Halcyon.mp3'); var btn = document.getElementById('btn'); var vol = document.getElementById('vol'); var cur = document.getElementById('cur'); var dur = document.getElementById('dur'); var state = 'pause'; vol.value = 100; audio.onloadeddata = function(){ dur.textContent = Math.floor(audio.duration) + 's'; } setInterval(function(){ cur.textContent = Math.floor(audio.currentTime) + 's'; }, 200); btn.onclick = function(){ if(state === 'play'){ state = 'pause'; btn.textContent = '播放'; audio.pause(); }else{ state = 'play'; btn.textContent = '暂停'; audio.play(); } } vol.oninput = function(){ audio.volume = vol.value/100; }