在開發中,若是咱們的網頁要播放媒體(音頻或者視頻)之類的,那麼h5中的媒體播放器必然是最好的選擇(flash時代已通過去)。可是h5中的播放器播放控件不少時候不是咱們須要的,這時候咱們要改變播放控件就須要咱們去了解h5中
<video>
標籤的一些事件屬性,具體能夠查看
MDN上的介紹。根據這些屬性,我弄了一個vue的組件的demo,具體可查看
源碼這裏,demo可
查看這裏
那麼定製媒體播放控件就能夠經過一些屬性來控制媒體播放、暫停仍是播放進度之類的。html
loadedmetadata
媒體加載完成後返回媒體的一些有效信息,如:媒體播放總時長durationvue
onLoadedmetadata(res) { this.maxTime = this.formatTime(parseInt(res.target.duration)); },
由於返回的duration
是秒,因此用formatTime轉化爲00:00:00的格式git
formatTime(time) { let secondType = typeof time; let second = parseInt(time); if (secondType === "number" || secondType === "string") { var hours = Math.floor(second / 3600); second = second - hours * 3600; var mimute = Math.floor(second / 60); second = second - mimute * 60; return ( hours + ":" + ("0" + mimute).slice(-2) + ":" + ("0" + second).slice(-2) ); } else { return "0:00:00"; } },
經過play
和pause
事件咱們能夠控制媒體的播放和暫停,並經過一個變量感知音頻是否在播放,經過這個變量咱們就能夠變換咱們的播放和中止圖標了。github
this.playing ? this.pausePlay() : this.startPlay();
經過timeupdate
能夠實時獲取音頻播放時的進度,從而改變咱們本身定製的進度條,timeupdate調用時會返回媒體的已經播放的時長和播放總時長,單位是秒。web
onTimeupdate(res) { this.currentTime = res.target.currentTime; this.sliderTime = parseInt( (this.currentTime / res.target.duration) * 100 ); },
咱們能夠經過volume
屬性控制音頻的音量的大小。
如:myvideo.volume=20,音量改變時會觸發volumechange事件ide
playbackRate屬性能夠獲取和設置媒體的倍速播放,如myvideo.playbackRate=2。ui
具體能夠查看源碼,主要是利用(播放進度條/總進度條)=(播放時長currentTime/總時長duration)這公式進行進度條進度的控制。this
demo中的模擬了平時看視頻時能夠全屏和退出全屏顯示的功能。code
//全屏事件 requestFullScreen(element) { var requestMethod = element.requestFullscreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen; if (requestMethod) { requestMethod.call(element); } else if (typeof window.ActiveXObject !== "undefined") { //for Internet Explorer var wscript = new ActiveXObject("WScript.Shell"); if (wscript !== null) { wscript.SendKeys("{F11}"); } } },
exitFullScreen() { //退出全屏 var exitMethod = document.exitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen || document.webkitExitFullscreen; if (exitMethod) { exitMethod.call(document); } else if (typeof window.ActiveXObject !== "undefined") { //for Internet Explorer var wscript = new ActiveXObject("WScript.Shell"); if (wscript !== null) { wscript.SendKeys("{F11}"); } } }