站長資訊網
        最全最豐富的資訊網站

        HTML5 VideoAPI,打造自己的Web視頻播放器


          一、基礎知識

          1.用法

        <video src="./video/mv.mp4">video>

          注意:audio和video元素必須同時包含開始和結束標簽,不能使用

          2.重要HTML屬性

          controls:ontrol:如果出現該屬性,則向用戶顯示控件,比如播放按鈕。每個瀏覽器中的播放控件都不太一樣,但用途都一樣,都可以控制開始和結束,跳到新位置和調節音量

          autoplay:autoplay:如果出現該屬性,則視頻在就緒后馬上播放。如果不設置autoplay屬性,必須是用戶單擊播放按鈕才會播放音頻文件。

          loop:loop:(循環播放)告訴瀏覽器在音頻到達末尾時,再從頭開始重新播放

          preload:auto、mete、none:告訴瀏覽器如何下載音頻

        • auto:讓瀏覽器下載整個文件,以便用戶單擊播放按鈕時就能播放。當然,下載過程是后臺進行的,網頁訪客不必等待下載完成,而且仍然可以隨意查看網頁。

        • meta:告訴瀏覽器先獲取音頻文件開頭的數據塊,從而足以確定一些基本信息(比如音頻的總時長)

        • none:**告訴瀏覽器不必預先下載。恰當地利用這些值,可以節省帶寬。

          如果沒有設置preload屬性,瀏覽器就自己決定是否預先下載了。對這一點,不同瀏覽器的處理方式也不一樣。多數瀏覽器將auto作為默認值,但Firefox的默認值是metadata。不過,也請大家注意,這個preload屬性也不是必須嚴格執行的規則,而只是你對瀏覽器的建議。根據具體情況,瀏覽器可以忽略你的設置。(有些舊版本瀏覽器根據不會在意preload屬性。)

          3.常用事件

          事件名稱 : 解釋

          oncanplay:當文件就緒可以開始播放時運行的腳本(緩沖已足夠開始時)。

          ontimeupdate: 當播放位置改變時(比如當用戶快進到媒介中一個不同的位置時)運行的腳本。

          onended:當媒介已到達結尾時運行的腳本(可發送類似“感謝觀看”之類的消息)。

          4.常用方法

          方法名稱 :解釋

          play():開始播放音頻/視頻

          pause():暫停當前播放的音頻/視頻

          5.常用API屬性

          屬性名稱 : 解釋

          duration:返回當前音頻/視頻的長度(以秒計)

          paused:設置或返回音頻/視頻是否暫停

          currentTime:設置或返回音頻/視頻中的當前播放位置(以秒計)

          ended:返回音頻/視頻的播放是否已結束

          更多屬性、事件、方法請查看w3school

          二、打造自己的播放器

          我們使用JavaScript控制播放控件的行為(自定義播放控件),實現如下功能:

        • 利用HTML+CSS制作一個自己的播放控件條,然后定位到視頻最下方

        • 視頻加載loading效果

        • 播放、暫停

        • 總時長和當前播放時長顯示

        • 播放進度條

        • 全屏顯示

          1.播放控件

        <body><figure>      <figcaption>視頻播放器figcaption>    <p class="player">          <video src="./video/mv.mp4">video>        <p class="controls">                            <a href="javascript:;" class="switch fa fa-play">a>                          <a href="javascript:;" class="expand fa fa-expand">a>                          <p class="progress">                  <p class="loaded">p>                <p class="line">p>                <p class="bar">p>            p>                          <p class="timer">                  <span class="current">00:00:00span> /                <span class="total">00:00:00span>            p>                      p>    p>figure>

          上面是全部HTML代碼,.controls類就是播放控件HTML,引用CSS代碼:

        <link rel="stylesheet" href="./css/font-awesome.css"><link rel="stylesheet" href="./css/player.css">

          為了顯示播放按鈕等圖標我使用了字體圖標

          2.視頻加載loading效果

          一開始先隱藏視頻,用一個背景圖片替代,等到視頻加載完成可以播放時在顯示視頻

          CSS:

        .player {    width: 720px;    height: 360px;    margin: 0 auto;    background: #000 url(../images/loading.gif) center/300px no-repeat;    position: relative;}   video {    display: none;    height: 100%;    margin: 0 auto;

          3.播放功能

          讓我們開始寫javascript代碼吧,首先我們先獲取要用到的DOM元素:

        var video = document.querySelector("video");var isPlay = document.querySelector(".switch");var expand = document.querySelector(".expand");var progress = document.querySelector(".progress");var loaded = document.querySelector(".progress > .loaded");var currPlayTime = document.querySelector(".timer > .current");var totalTime = document.querySelector(".timer > .total");

          當視頻可以播放時,顯示視頻

        //當視頻可播放的時候video.oncanplay = function(){      //顯示視頻        this.style.display = "block";      //顯示視頻總時長        totalTime.innerHTML = getFormatTime(this.duration);  };

          4.播放、暫停

          點擊播放按鈕時顯示暫停圖標,在播放和暫停狀態之間切換圖標

        //播放按鈕控制isPlay.onclick = function(){        if(video.paused) {              video.play();          } else {              video.pause();          }        this.classList.toggle("fa-pause");  };

          5.總時長和當前播放時長顯示

          前面代碼中其實已經設置了相關代碼,此時我們只需要把獲取到的毫秒數轉換成我們需要的時間格式即可,提供getFormatTime()函數:

        function getFormatTime(time) {        var time = time  0;           var h = parseInt(time/3600),              m = parseInt(time%3600/60),              s = parseInt(time%60);          h = h < 10 ? "0"+h : h;          m = m < 10 ? "0"+m : m;          s = s < 10 ? "0"+s : s;           return h+":"+m+":"+s;      }

          6.播放進度條

        //播放進度video.ontimeupdate = function(){    var currTime = this.currentTime,    //當前播放時間      duration = this.duration;       // 視頻總時長      //百分比      var pre = currTime / duration * 100 + "%";    //顯示進度條      loaded.style.width = pre;        //顯示當前播放進度時間      currPlayTime.innerHTML = getFormatTime(currTime);  };

          這樣就可以實時顯示進度條了,此時,我們還需要點擊進度條進行跳躍播放,即我們點擊任意時間點視頻跳轉到當前時間點播放:

        //跳躍播放progress.onclick = function(e){    var event = e  window.event;      video.currentTime = (event.offsetX / this.offsetWidth) * video.duration;  };

          7.全屏顯示

          這個功能可以使用HTML5提供的全局API:webkitRequestFullScreen實現,跟video無關:

        //全屏expand.onclick = function(){       video.webkitRequestFullScreen();  };

          經測試在firefox、IE下全屏功能不可用,這樣正常了,全屏API是針對webkit內核的。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产A级毛片久久久精品毛片| 久久久无码精品午夜| 国产精品人人做人人爽| 精品国产三级a在线观看| 欧美日韩精品久久久免费观看| 精品视频一区二区三区免费| 人妻少妇精品中文字幕AV| 亚洲av无码国产精品色在线看不卡| 国产精品福利在线观看免费不卡| 国产精品视频久久| 国产精品后入内射日本在线观看| 亚洲国产精品无码专区| 亚洲精品99久久久久中文字幕| 亚洲αv在线精品糸列| 国产va免费精品| 国产精品天天影视久久综合网 | 国产成人1024精品免费| 国产成人精品日本亚洲11| 久久亚洲私人国产精品vA| 正在播放酒店精品少妇约 | 久久久久久噜噜精品免费直播| 国产精品极品| 国产精品无码素人福利| 国产精品婷婷午夜在线观看| 国产成人综合精品一区| 99久免费精品视频在线观看| 88国产精品无码一区二区三区| 午夜影视日本亚洲欧洲精品一区| 久久精品无码一区二区三区| 日韩精品www| 999久久久国产精品| 成人午夜精品亚洲日韩| 国产精品自在在线午夜福利| 国产亚洲曝欧美不卡精品| 久久久久久久久久久免费精品| 青娱乐国产精品视频| 中文成人无码精品久久久不卡 | 精品人妻少妇一区二区| 久久se精品一区二区影院| 欧美成人精品一区二三区在线观看| 久久国产成人精品国产成人亚洲|