自定義播放器


api

音頻和視頻API一致

方法

方法 描述
addTextTrack() 向音頻/視頻添加新的文本軌道
canPlayType() 檢測瀏覽器是否能播放指定的音頻/視頻類型
load() 重新加載音頻/視頻元素
play() 開始播放音頻/視頻
pause() 暫停當前播放的音頻/視頻

屬性

屬性 描述
audioTracks 返回表示可用音軌的 AudioTrackList 對象
autoplay 設置或返回是否在加載完成后隨即播放音頻/視頻
buffered 返回表示音頻/視頻已緩沖部分的 TimeRanges 對象
controller 返回表示音頻/視頻當前媒體控制器的 MediaController 對象
controls 設置或返回音頻/視頻是否顯示控件(比如播放/暫停等)
crossOrigin 設置或返回音頻/視頻的 CORS 設置
currentSrc 返回當前音頻/視頻的 URL
currentTime 設置或返回音頻/視頻中的當前播放位置(以秒計)
defaultMuted 設置或返回音頻/視頻默認是否靜音
defaultPlaybackRate 設置或返回音頻/視頻的默認播放速度
duration 返回當前音頻/視頻的長度(以秒計)
ended 返回音頻/視頻的播放是否已結束
error 返回表示音頻/視頻錯誤狀態的 MediaError 對象
loop 設置或返回音頻/視頻是否應在結束時重新播放
mediaGroup 設置或返回音頻/視頻所屬的組合(用於連接多個音頻/視頻元素)
muted 設置或返回音頻/視頻是否靜音
networkState 返回音頻/視頻的當前網絡狀態
paused 設置或返回音頻/視頻是否暫停
playbackRate 設置或返回音頻/視頻播放的速度
played 返回表示音頻/視頻已播放部分的 TimeRanges 對象
preload 設置或返回音頻/視頻是否應該在頁面加載后進行加載
readyState 返回音頻/視頻當前的就緒狀態
seekable 返回表示音頻/視頻可尋址部分的 TimeRanges 對象
seeking 返回用戶是否正在音頻/視頻中進行查找
src 設置或返回音頻/視頻元素的當前來源
startDate 返回表示當前時間偏移的 Date 對象
textTracks 返回表示可用文本軌道的 TextTrackList 對象
videoTracks 返回表示可用視頻軌道的 VideoTrackList 對象
volume 設置或返回音頻/視頻的音量

事件

事件 描述
abort 當音頻/視頻的加載已放棄時
canplay 當瀏覽器可以播放音頻/視頻時
canplaythrough 當瀏覽器可在不因緩沖而停頓的情況下進行播放時
durationchange 當音頻/視頻的時長已更改時
emptied 當目前的播放列表為空時
ended 當目前的播放列表已結束時
error 當在音頻/視頻加載期間發生錯誤時
loadeddata 當瀏覽器已加載音頻/視頻的當前幀時
loadedmetadata 當瀏覽器已加載音頻/視頻的元數據時
loadstart 當瀏覽器開始查找音頻/視頻時
pause 當音頻/視頻已暫停時
play 當音頻/視頻已開始或不再暫停時
playing 當音頻/視頻在已因緩沖而暫停或停止后已就緒時
progress 當瀏覽器正在下載音頻/視頻時
ratechange 當音頻/視頻的播放速度已更改時
seeked 當用戶已移動/跳躍到音頻/視頻中的新位置時
seeking 當用戶開始移動/跳躍到音頻/視頻中的新位置時
stalled 當瀏覽器嘗試獲取媒體數據,但數據不可用時
suspend 當瀏覽器刻意不獲取媒體數據時
timeupdate 當目前的播放位置已更改時
volumechange 當音量已更改時
waiting 當視頻由於需要緩沖下一幀而停止

 案例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>視頻播放</title>
    <!--字體圖標文件-->
    <link rel="stylesheet" href="css/font-awesome.css"/>
    <!--修飾視頻播放器樣式-->
    <link rel="stylesheet" href="css/player.css"/>
</head>
<body>
<!--多媒體語義標簽-->
<figure>
    <!--多媒體區域的標題解釋-->
    <figcaption>視頻播放器</figcaption>
    <div class="player">
        <!--一開始隱藏 加載可以播放就顯示-->
        <video src="./media/fun.mp4"></video>
        <!--自定義控制欄-->
        <div class="controls">
            <!-- 開始播放按鈕  -->
            <a href="javascript:;" class="switch fa fa-play"></a>
            <!-- 進度顯示區域 -->
            <div class="progress">
                <!--進度顯示條-->
                <div class="line"></div>
                <!--默認的灰色進度條-->
                <div class="bar"></div>
            </div>
            <!--時間區域-->
            <div class="timer">
                <span class="current">00:00:00</span> / <span class="total">00:00:00</span>
            </div>
            <!--全屏按鈕 取消全屏按鈕-->
            <a href="javascript:;" class="expand fa fa-arrows-alt"></a>
        </div>
    </div>
    <!--<input type="text" class="dm"><button class="send">發射</button>-->
</figure>
<script src="js/jquery.min.js"></script>
<script>
    $(function () {
        //播放器
        var $player = $('.player');
        var player = $player[0];
        //視頻jquery元素
        var $video = $player.find('video');
        //video 元素  api存在它里面
        var video = $video[0];
        //播放或暫停按鈕
        var $switch = $('.switch');
        //進度條
        var $line = $('.line');
        //格式化時間
        var formatTime = function (time) {
            //time 40.2s
            var h = Math.floor(time / 3600);
            var m = Math.floor(time % 3600 / 60);
            var s = Math.floor(time % 60);
            return (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s);
        };
        //當前播放時間容器
        var $current = $('.current');
        //總時長
        var $total = $('.total');
        //全屏 取消全屏
        var $expand = $('.expand');
        //獲取灰色進度條
        var $bar = $('.bar');

        /*1.加載的視頻可以播放 顯示視頻標簽*/
        /*6.在視頻加載成功的時候 顯示總時長*/
        video.oncanplay = function () {
            //顯示視頻
            $video.show();
            //實現總時長
            $total.html(formatTime(video.duration));
        };
        /*2.點擊播放按鈕  視頻進行播放*/
        /*3.點擊暫停按鈕  視頻進行暫停*/
        $switch.on('click', function () {
            if ($switch.hasClass('fa-play')) {
                video.play();
                $switch.removeClass('fa-play').addClass('fa-pause');
            } else {
                video.pause();
                $switch.addClass('fa-play').removeClass('fa-pause');
            }
        });

        /*4.在播放的過程中顯示進度條*/
        /*4.1 監聽當前播放的改變 去計算
        當前的播放進度百分比=當前播放時間/視頻總時長 當中寬度設置進度條*/
        /*5.在播放的過程中顯示當前播放時間  00:00:00*/
        video.ontimeupdate = function () {
            //進度顯示
            var p = video.currentTime / video.duration * 100 + '%';
            $line.css('width', p);
            //播放時間顯示
            $current.html(formatTime(video.currentTime));
        };


        /*7.點擊全屏操作按鈕  播放器全屏*/
        /*8.點擊取消全屏按鈕  播放器取消全屏*/
        $expand.on('click', function () {
            if ($expand.hasClass('fa-arrows-alt')) {
                player.webkitRequestFullScreen();
                $expand.removeClass('fa-arrows-alt').addClass('fa-compress');
            } else {
                document.webkitCancelFullScreen();
                //$expand.addClass('fa-arrows-alt').removeClass('fa-compress');
            }
        });
        //當你按  esc 退出全屏的時候  沒有改按鈕
        /*document.onkeyup = function(){ 瀏覽器禁用了全屏狀態對esc鍵的監聽
            console.log('ok');
        }*/
        /*去監聽是否全屏  如果全屏 */
        window.onresize = function () {
            /*判斷是否全屏*/
            //注意:
            if (!document.webkitIsFullScreen) {
                $expand.addClass('fa-arrows-alt').removeClass('fa-compress');
            }
        };

        /*9.點擊進度條 根據位置切換當前播放進度*/
        /*9.1 獲取點擊的位置*/
        /*9.2 根據位置和進度條的長度比例 計算需                 要切換的播放時間*/
        /*9.3 設置切換的播放時間為當前播放時間*/
        $bar.on('click', function (e) {
            //獲取點擊的位置距離元素左側的距離
            var currentTime = e.offsetX / $bar.width() * video.duration;
            video.currentTime = currentTime;
        });

        /*10. 播放結束 重置一下*/
        video.onended = function(){
            video.currentTime = 0;
            $switch.addClass('fa-play').removeClass('fa-pause');
        };
    });
</script>
</body>
</html>
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM