视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
HTML5VideoAPI,打造自己的Web视频播放器
2020-11-27 15:08:37 责编:小采
文档

  如果没有设置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内核的。

    下载本文
    显示全文
    专题