zoukankan      html  css  js  c++  java
  • 自定义播放器

    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
  • 相关阅读:
    鬼谷子 简单飞扬
    JavaScript 随笔汇集 简单飞扬
    p2p学习 简单飞扬
    p2p知识 简单飞扬
    使用 JFreeChart来创建基于web的图表 简单飞扬
    Javascript中最常用的55个经典技巧 简单飞扬
    庆祝在博客园申请博客成功
    读《WCF技术剖析》(卷一)笔记(一)
    常用字符串截取类
    创建yum本地源 转帖
  • 原文地址:https://www.cnblogs.com/maxiag/p/11187511.html
Copyright © 2011-2022 走看看