html5视频播放器 二 (功能实现及播放优化)

样式改写css,其中的一些按钮是在“阿里妈妈”上找的字体图标,就不向上传了。

/* 
 *CoolPlay视频播放器
 * 2016年8月1日 
 * 627314658@qq.com 
 * */

@font-face {
    font-family: 'icomoon';
    src: url('fonts/icomoon.eot?63s28v');
    src: url('fonts/icomoon.eot?63s28v#iefix') format('embedded-opentype'), url('fonts/icomoon.ttf?63s28v') format('truetype'), url('fonts/icomoon.woff?63s28v') format('woff'), url('fonts/icomoon.svg?63s28v#icomoon') format('svg');
    font-weight: normal;
    font-style: normal;
}

[class^="icon-"],
[class*=" icon-"] {
    /* use !important to prevent issues with browser extensions that change fonts */
    font-family: 'icomoon' !important;
    speak: none;
    font-style: normal;
    font-weight: normal;
    font-variant: normal;
    text-transform: none;
    line-height: 1;
    /* Better Font Rendering =========== */
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}
/*一种旋转的策略*/
@-moz-keyframes spin {
    0% {
        -moz-transform: rotate(0deg)
    }
    
    100% {
        -moz-transform: rotate(359deg)
    }
}
@-webkit-keyframes spin {
    0% {
        -webkit-transform: rotate(0deg)
    }
    
    100% {
        -webkit-transform: rotate(359deg)
    }
}
@-o-keyframes spin {
    0% {
        -o-transform: rotate(0deg)
    }
    
    100% {
        -o-transform: rotate(359deg)
    }
}
@-ms-keyframes spin {
    0% {
        -ms-transform: rotate(0deg)
    }
    
    100% {
        -ms-transform: rotate(359deg)
    }
}
@keyframes spin {
    0% {
        transform: rotate(0deg)
    }
    
    100% {
        transform: rotate(359deg)
    }
}
.icon-c-loading:before {
  content: "\e983";
}
.icon-c-enlarge:before {
  content: "\e989";
}
.icon-c-shrink:before {
  content: "\e98a";
}
.icon-c-play:before {
  content: "\ea1c";
}
.icon-c-pause:before {
  content: "\ea1d";
}
.icon-c-previous:before {
  content: "\ea23";
}
.icon-c-next:before {
  content: "\ea24";
}
.icon-c-voice:before {
  content: "\ea27";
}
.icon-c-mute:before {
  content: "\ea2a";
}
.icon-c-refresh:before {
  content: "\ea2e";
}
// .icon-c-voice:before {
//     /*声音*/
    
//     content: "\e900";
// }
// .icon-c-mute:before {
//     /*静音*/
    
//     content: "\e901";
// }
// .icon-c-pause:before {
//     /*暂停*/
    
//     content: "\e902";
// }
// .icon-c-play:before {
//     /*播放*/
    
//     content: "\e903";
// }
// .icon-c-loading:before {
//     /*加载*/
    
//     content: "\e97a";
// }
// .icon-c-enlarge:before {
//     /*全屏*/
    
//     content: "\e989";
// }
// .icon-c-shrink:before {
//     /*缩小*/
    
//     content: "\e98a";
// }
// .icon-c-previous:before {
//     /*上一首*/
    
//     content: "\ea21";
// }
// .icon-c-next:before {
//     /*下一首*/
    
//     content: "\ea22";
// }
// .icon-c-refresh:before {
//     /*重新加载*/
    
//     content: "\ea2e";
// }
* {
    margin: 0;
    padding: 0;
}
body {
    font-size: 16px;
    font-family: "微软雅黑";
}

/*播放器区域*/
.cool-play {
    width: 100%;
    height: 100%;
    position: relative;
}
.cool-play:-webkit-full-screen {
  width: 100%;
  height: 100%;
}
.cool-play .cool-title {
    width: 100%;
    height: 40px;
    background-color: rgba(130, 129, 129, 0.8);
    position: relative;
    line-height: 40px;
    z-index: 2;
    color: #ff6600;
    opacity: 0;
    transition: opacity 0.8s;
    -webkit-transition: opacity 0.8s;
    -moz-transition: opacity 0.8s;
    -ms-transition: opacity 0.8s;
}
.cool-play .cool-title span {
    padding-left: 20px;
}
.cool-play .cool-video .icon-c-loading {
    color: #FF6600;
    top: 50%;
    left: 50%;
    position: absolute;
    font-size: 40px;
    margin-left: -20px;
    margin-top: -20px;
    -moz-animation: spin 2s infinite linear;
    -o-animation: spin 2s infinite linear;
    -webkit-animation: spin 2s infinite linear;
    animation: spin 2s infinite linear;
    display: none;
}
.cool-play .video {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    background-color: #000;
}

/*播放器按钮*/
.cool-module {
    width: 100%;
    background-color: rgba(130, 129, 129, 0.8);
    bottom: 0px;
    left: 0px;
    position: absolute;
    opacity: 1;
    /*方便调试,先定义为1,正常情况为0*/
    
    color: #fff;
    transition: opacity 0.8s;
    -webkit-transition: opacity 0.8s;
    -moz-transition: opacity 0.8s;
    -ms-transition: opacity 0.8s;
}
.cool-module a {
    cursor: pointer;
}
.cool-btn {
    height: 38px;
}
.cool-play:hover .cool-title {
    opacity: 1;
}
.cool-play:hover .cool-module {
    opacity: 1;
}
.cool-btn .btn a {
    font-size: 24px;
    line-height: 38px;
    padding-left: 10px;
    padding-right: 10px;
    display: inline-block;
}
.cool-btn .cool-btn-left {
    display: inline-block;
    padding-left: 10px;
    float: left;
}
.cool-btn .cool-btn-center {
    display: inline-block;
    line-height: 38px;
    float: left;
    font-size: 12px;
    color: #FFFFFF;
    margin-left: 20px;
}
.cool-btn .cool-btn-right {
    display: inline-block;
    float: right;
    padding-right: 10px;
}
.cool-btn a:hover {
    color: #ff5500;
}

/*进度条*/
.cool-module .cool-progress {
    width: 100%;
    height: 4px;
    background-color: #fff;
    display: block;
    position: relative;
}
.cool-module .cool-progress .cool-played {
    background-color: #ff6600;
    height: 100%;
    width: 0%;
    position: absolute;
    /*transition: width .3s;
    -webkit-transition: width .3s;
    -moz-transition: width .3s;
    -ms-transition: width .3s;*/
}
.cool-module .cool-progress .cool-drag {
    height: 8px;
    width: 8px;
    border-radius: 100%;
    background-color: #fff;
    top: -2px;
    position: relative;
    margin-left: 0%;
    position: absolute;
    display: none;
}
.voice{
    position: relative;
}
.voice:hover .c-voice{
    display: block;
}
.c-voice{
  position: absolute;
  width: 40px;
  height: 120px;
  background-color: rgba(130, 129, 129, 0.8);
  bottom: 38px;
  left: 0;
  display: none;
}
.c-voice-triangle{
      position: absolute;
    bottom: -6px;
    left: 12px;
    width: 0;
    height: 0;
    border-left: 8px solid transparent;
    border-right: 8px solid transparent;
    border-top: 6px solid rgba(130, 129, 129, 0.8);
}
.voice-bar{
  height: 100px;
  width: 2px;
  background-color: #000;
  position: absolute;
  left: 50%;
  margin-left: -1px;
  bottom: 10px;
}
.voice-bared{
  height: 80px;
  width: 2px;
  background-color: #f50;
  position: absolute;
  left: 50%;
  margin-left: -1px;
  bottom: 0;
}
.voice-dot{
  position: absolute;
  width: 10px;
  height: 10px;
  background-color: #fff;
  border-radius: 100%;
  left: -4px;
  top: -5px;
}
.voice-mask{
  height: 100px;
  width: 20px;
  background-color: red;
  position: absolute;
  bottom: 10px;
  left: 50%;
  margin-left: -10px;
  opacity: 0;
}
播放器样式Css

播放功能实现及优化js与html5视频播放器api调用

var myVideo = document.getElementById("video");//播放器
var coolPlay = document.getElementById("cool-play");
var cPlay = document.getElementById("c-play");//播放按钮
var cProgress = document.getElementById("c-progress");
var cPlayed = document.getElementById("c-played");//已经播放过的进度条
var cDrag = document.getElementById("c-drag");//进度条顶端的圆钮
var cCurrentTime = document.getElementById("c-currentTime");//当前时间span
var cTotalTime = document.getElementById("c-totalTime");//总时间
var loading = document.getElementsByClassName("icon-c-loading");//loading 旋转图标
var refresh = document.getElementsByClassName("icon-c-refresh");//重新加载按钮
var voice = document.getElementsByClassName("i-voice");//音量按钮
var voice_mask = document.getElementsByClassName("voice-mask");//音量总进度条
var voice_bared= document.getElementsByClassName("voice-bared");//现在的音量的进度条
var voice_dot = document.getElementsByClassName("voice-dot");
var voice_num = 0.8;//初始化当前的音量
volume(voice_num);//把音量初始化到80
function volume(n){
  myVideo.volume = n;
  voice_bared[0].style.height=n*100 + 'px';
}
function playPause() {
  if(myVideo.paused) {
    Play();
  } else {
    Pause();
  }
};
function Play(){
  cPlay.className = "icon-c-pause";
  myVideo.play();
}
function Pause(){
  cPlay.className = "icon-c-play";
  myVideo.pause();
}
refresh[0].onclick = function (){
  Load();
}
function Load(){
  Pause();
  myVideo.load();
  cPlayed.style.width = 0+"%";
  cDrag.style.display="none";
  cCurrentTime.innerHTML = "00:00";
  cTotalTime.innerHTML = "00:00";
}
//播放时间及进度条控制
myVideo.ontimeupdate = function(){  
  var currTime = this.currentTime,    //当前播放时间
      duration = this.duration;       // 视频总时长
  if(currTime == duration){
    Pause();
  }
  //百分比
  var pre = currTime / duration * 100 + "%";
  //显示进度条
  cPlayed.style.width = pre;
  var progressWidth = cProgress.offsetWidth;
  var leftWidth = progressWidth*(currTime / duration);
  if(leftWidth > 8 && (progressWidth - leftWidth) > 4){
    cDrag.style.display="block";    
  } else {
    cDrag.style.display="none";
  }  
  cDrag.style.left = progressWidth*(currTime / duration)-4 + "px";
  //显示当前播放进度时间
  cCurrentTime.innerHTML = getFormatTime(currTime,duration);
  cTotalTime.innerHTML = getFormatTime(duration,duration);
};
//当浏览器可在不因缓冲而停顿的情况下进行播放时
myVideo.oncanplaythrough = function() {
  loading[0].style.display="none";
}
  //当视频由于需要缓冲下一帧而停止
myVideo.onwaiting = function() {
  loading[0].style.display="block";
}
//当用户开始移动/跳跃到音频/视频中的新位置时
myVideo.onseeking = function() {
  if (myVideo.readyState == 0 || myVideo.readyState == 1) {
    loading[0].style.display="block";
  }
}
//拖拽进度条上的园钮实现跳跃播放
/*cDrag.onmousedown = function(e){ 
  if(cPlay.className == 'icon-c-pause')
    myVideo.pause();
  loading[0].style.display="block";
  document.onmousemove = function(e){
    console.log("e.clientX:"+e.clientX);
    console.log("coolPlay.offsetLeft:"+coolPlay.offsetLeft);

    var leftV = e.clientX - coolPlay.offsetLeft;
    console.log("coolPlay.offsetLeft:"+coolPlay.offsetLeft);
    console.log("leftV:"+leftV);
    if(leftV <= 0){
      leftV = 0;
    }
    if(leftV >= coolPlay.offsetWidth){
      leftV = coolPlay.offsetWidth-10;
    }
    cDrag.style.left = leftV+"px";
//  console.log(leftV);
  }    
  document.onmouseup = function (){
    var scales = cDrag.offsetLeft/cProgress.offsetWidth;
    var du = myVideo.duration*scales;
    console.log("scales:"+scales);
    console.log("du:"+du);
    myVideo.currentTime = du;
    if(cPlay.className == 'icon-c-pause')
      myVideo.play();     
    document.onmousemove = null;
    document.onmousedown = null;
  }
}*/
//在进度条上点击跳跃播放
cProgress.onclick = function(e){
  var event = e || window.event;
  console.log("当前点击的位置为:"+(event.offsetX / this.offsetWidth) * myVideo.duration);
  myVideo.currentTime = (event.offsetX / this.offsetWidth) * myVideo.duration;
};
//根据duration总长度返回 00 或 00:00 或 00:00:00 三种格式
function getFormatTime(time,duration) {
  var time = time || 0;         
  
  var h = parseInt(time/3600),
      m = parseInt(time%3600/60),
      s = parseInt(time%60);
  s = s < 10 ? "0"+s : s;
  if(duration>=60 && duration <3600){
    m = m < 10 ? "0"+m : m; 
    return m+":"+s;
  }
  if (duration >=3600){
    m = m < 10 ? "0"+m : m; 
    h = h < 10 ? "0"+h : h;
    return h+":"+m+":"+s;
  } 
  return s;
}   
//音量的控制部分
//点击声音按钮时,把视频静音
voice[0].onclick = function(){  
  if(myVideo.muted){
    voice[0].className="i-voice icon-c-voice";
    myVideo.muted=false;
    if(voice_num >= 0 && voice_num <= 1){
      volume(voice_num);
    } else {
      volume(0.8);
    }    
  } else {
    voice_num = myVideo.volume; //记录下来静音前的音量
    voice[0].className='i-voice icon-c-mute';
    myVideo.muted=true;
    volume(0);
  }  
}
//当点击进度条上的一个位置时,变化音量
voice_mask[0].onclick = function(e){
  var event = e || window.event;  
  if(event.offsetY >= 100){
    voice[0].className='i-voice icon-c-mute';
    myVideo.muted=true;
    volume(0);
    return;
  }
  volume((100-event.offsetY)/100);
};
/*voice_mask[0].onmousedown = function(e){ 
  document.onmousemove = function(e){
    console.log("e.clientY:"+e.clientY);
    console.log("e.offsetY:"+e.offsetY);
    console.log(e);
    console.log(voice[0].offsetTop);
    console.log(document.getElementsByClassName("voice")[0]);
    volume((100-e.offsetY)/100);
    if(event.offsetY == 100){
      voice[0].className='i-voice icon-c-mute';
      myVideo.muted=true;
      volume(0);
    }   
  }    
  document.onmouseup = function (){    
    document.onmousemove = null;
    document.onmousedown = null;
  }
}*/
//全屏的控制部分
var fullscreen = document.getElementById('cool-fullScreen');
var FullScreenTF = true;
function launchFullscreen(element) {
  //此方法不能在异步中进行,否则火狐中不能全屏操作
  if(element.requestFullscreen) {
    element.requestFullscreen();
  } else if(element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
  } else if(element.msRequestFullscreen) {
    element.msRequestFullscreen();
  } else if(element.oRequestFullscreen) {
    element.oRequestFullscreen();
  } else if(element.webkitRequestFullscreen) {
    element.webkitRequestFullScreen();
  } else {
    alert("您的浏览器版本太低,不支持全屏功能!");
  }
  FullScreenTF = false;
};
//退出全屏
function exitFullscreen() {
  if(document.exitFullscreen) {
    document.exitFullscreen();
  } else if(document.msExitFullscreen) {
    document.msExitFullscreen();
  } else if(document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if(document.oRequestFullscreen) {
    document.oCancelFullScreen();
  } else if(document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  } else {
    alert("您的浏览器版本太低,不支持全屏功能!");
  }
  FullScreenTF = true;
};
fullscreen.onclick = function() {       
  if(FullScreenTF) {
    launchFullscreen(coolPlay);
    fullscreen.className = "icon-c-shrink";         
  } else {
    exitFullscreen();
    fullscreen.className = "icon-c-enlarge";          
  }
};
播放器js及html5视频播放器Api调用

还有一些功能不够完善,请留言讨论。

转载于:https://www.cnblogs.com/y-z-q/p/6362670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值