fulan-editor
Version:
An open source react editor based on draft-Js and ant design, good support HTML, markdown and Draft Raw format.
382 lines (298 loc) • 13.4 kB
JavaScript
var player = videojs("idVideo", {
"controls": true,
"autoplay": false,
"preload": "auto",
"loop": false,
"muted": false,
controlBar: {
playToggle:false,
captionsButton: false,
chaptersButton: false,
playbackRateMenuButton: false,
LiveDisplay: false,
subtitlesButton: false,
remainingTimeDisplay: false,
progressControl: false,
volumeMenuButton: false,
fullscreenToggle: false,
playbackRateMenuButton: true,
}
}, function () {
//自定义播放按钮
var customer_play = document.createElement('btn')
customer_play.innerHTML = '<btn class="customer_pause" id="idplay" onclick="onclickPlayBtn()">'+
'</btn>';
var controlBar = document.getElementsByClassName('vjs-control-bar')[0];
controlBar.appendChild(customer_play);
/*自定义时间显示*/
var progresstimeBtn = document.createElement('btn');
progresstimeBtn.innerHTML = '<div class="progressTime">'+'<span class="current"></span>'+
+'<div><span>/</span></div>'+'<span class="duration"></span>'+'</div>';
controlBar.appendChild(progresstimeBtn);
player.on('timeupdate', function() {
$('.duration').text(formatTime(player.duration()));
$('.current').text(formatTime(player.currentTime()));
});
//自定义全屏按钮
var customer_Fullscreen = document.createElement('btn')
customer_Fullscreen.innerHTML = '<btn class="fullscreen_customBtn" id="idfullscreen" onclick="onclickFullscreenBtn()">'+
'</btn>';
controlBar.appendChild(customer_Fullscreen);
/*弹幕开关*/
var danmulabel = document.createElement('label')
danmulabel.innerHTML = '<label id="iddanmulabel" class="danmulabel danmulabel-nochose" for="idonoffcheckbox">'+
'弹幕</label>';
controlBar.appendChild(danmulabel);
var danmuswitchBtn = document.createElement('btn');
danmuswitchBtn.innerHTML = '<btn class="danmuswitch">'+
'<input id="idonoffcheckbox" class="danmuswitch-checkbox" type="checkbox" onclick="onclickDanmuswitchBtn()">'+
'<label id="idonofflabel" class="danmuswitch-label danmuswitch-label-nochose" for="idonoffcheckbox">'+
'<span id="idoffradio" class="danmuswitch-switch"></span>'+
'</btn>';
controlBar.appendChild(danmuswitchBtn);
/*自定义视频切换*/
var videoPanelMenuBtn = document.createElement('btn')
videoPanelMenuBtn.innerHTML = '<div class="vjs-subs-caps-button vjs-menu-button vjs-menu-button-popup vjs-control vjs-button" aria-live="polite" aria-expanded="false" aria-haspopup="true">'
+ '<div class="vjs-menu" role="presentation">'
+ '<ul class="vjs-menu-content" role="menu">'
+ '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="changeVideo(1)">普通</li>'
+ '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="changeVideo(2)">标清 </li>'
+ '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="changeVideo(3)">高清 </li>'
+ '</ul></div>'
+'<button class="vjs-subs-caps-button vjs-control vjs-button" type="button" aria-live="polite" title="清晰度切换" aria-disabled="false">'
+'<span aria-hidden="true" class="vjs-icon-placeholder"></span><span class="vjs-control-text">清晰度切换</span>'
+'</button>'
+'</div>' ;
controlBar.appendChild(videoPanelMenuBtn);
var obj={tag:false,ctime:0};
window.obj=obj;
var myPlayer=videojs.getPlayers()['idVideo'];
myPlayer.on("timeupdate", function(){
if(window.obj.tag){
videojs("idVideo").currentTime(window.obj.ctime)
videojs("idVideo").play();
window.obj.tag=false;
}
//视频打点
var ctime_=videojs("idVideo").currentTime();
if(ctime_==60){
videojs("idVideo").currentTime(ctime_+1);
//do something
}
});
/*自定义音量按钮*/
var customer_volumeBtn = document.createElement('btn')
customer_volumeBtn.innerHTML = '<btn class="customer_volume" id="idvolume" onclick="onclickMute()"">'+
'</btn>';
controlBar.appendChild(customer_volumeBtn);
$("body").append("<div id='tip2' hidden='true'><form id='idbackground'><div id='slider-vertical'></div></form></div> ");
$('#idvolume').scojs_tooltip({
appendTo: '.video-js',
contentElem: '#tip2',
});
$( "#slider-vertical" ).slider({
orientation: "vertical",
range: "min",
min: 0,
max: 100,
value: 50,
slide: function( event, ui ) {
//$( "#amount" ).val( ui.value );
player.volume = ui.value;
}
});
$("#idvolume").hover(function(){
var videoDiv = document.getElementById('idVideo');
var flwidth = videoDiv.offsetWidth -130;
var flheight = videoDiv.offsetHeight -180;
$("#idbackground").css('margin-left',flwidth+'px');
$("#idbackground").css('margin-top',flheight+'px');
});
/*自定义加速按钮*/
var fastBtn = document.createElement('btn')
fastBtn.innerHTML = '<btn class="fastBtn" id="fastBtn" onclick="fast()"">'+'</btn>';
controlBar.appendChild(fastBtn);
/*自定义加速按钮*/
var fastBtn = document.createElement('btn')
fastBtn.innerHTML = '<div class="vjs-subs-caps-button vjs-menu-button vjs-menu-button-popup vjs-control vjs-button" aria-live="polite" aria-expanded="false" aria-haspopup="true">'
+ '<div class="vjs-menu" role="presentation">'
+ '<ul class="vjs-menu-content" role="menu">'
+ '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="fast(1)">1x</li>'
+ '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="fast(2)">0.5x </li>'
+ '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="fast(3)">2x</li>'
+ '</ul></div>'
+'<button class="vjs-subs-caps-button vjs-control vjs-button" type="button" aria-live="polite" title="播放速度变更" aria-disabled="false">'
+'<span aria-hidden="true" class="vjs-icon-placeholder"></span><span class="vjs-control-text">播放速度变更</span>'
+'</button>'
+'</div>' ;
controlBar.appendChild(fastBtn);
/*自定义进度条*/
var progressBtn = document.createElement('div');
progressBtn.innerHTML = '<div class="progressBar">'+'<div class="bufferBar"></div>'+'<div class="timeBar"></div>'+
' <div class="processbtn"></div>'+'</div>';
$('.timeBar').after('<div class="processbtn"></div>');
controlBar.appendChild(progressBtn);
//update HTML5 video current play time
player.on('timeupdate', function() {
var currentPos = player.currentTime(); //Get currenttime
var maxduration = player.duration(); //Get video duration
var percentage = 100 * currentPos / maxduration; //in %
$('.timeBar').css('width', percentage+'%');
$('.processbtn').css('left', percentage-0.5+'%');
});
var timeDrag = false; /* Drag status */
$('.progressBar').mousedown(function(e) {
timeDrag = true;
updatebar(e.pageX);
});
$(document).mouseup(function(e) {
if(timeDrag) {
timeDrag = false;
updatebar(e.pageX);
}
});
$(document).mousemove(function(e) {
if(timeDrag) {
updatebar(e.pageX);
}
});
//update Progress Bar control
var updatebar = function(x) {
var progress = $('.progressBar');
var maxduration = player.duration(); //Video duraiton
var position = x - progress.offset().left; //Click pos
var percentage = 100 * position / progress.width();
//Check within range
if(percentage > 100) {
percentage = 100;
}
if(percentage < 0) {
percentage = 0;
}
//Update progress bar and video currenttime
$('.timeBar').css('width', percentage+'%');
player.currentTime( maxduration * percentage / 100);
player.play();
};
var startBuffer = function() {
var maxduration = player.duration();
var currentBuffer = player.bufferedEnd();
var percentage = 100 * currentBuffer / maxduration;
$('.bufferBar').css('width', percentage+'%');
if(currentBuffer < maxduration) {
setTimeout(startBuffer, 500);
}
};
setTimeout(startBuffer, 500);
});
var playStatus= true;
var fullscreenStatus = false;
function onclickPlayBtn() {
if (!playStatus){
playStatus= true;
$("#idplay").removeClass('customer_play');
$("#idplay").addClass('customer_pause');
player.play();
}else{
playStatus= false;
$("#idplay").removeClass('customer_pause');
$("#idplay").addClass('customer_play');
player.pause();
}
}
function onclickFullscreenBtn() {
if(!fullscreenStatus){
player.requestFullscreen();
fullscreenStatus = true;
$("#idfullscreen").removeClass('fullscreen_customBtn');
$("#idfullscreen").addClass('restore_customBtn')
}else{
player.exitFullscreen();
fullscreenStatus = false;
$("#idfullscreen").removeClass('restore_customBtn');
$("#idfullscreen").addClass('fullscreen_customBtn')
}
}
function onclickDanmuswitchBtn() {
var check = $("#idonoffcheckbox").is(':checked');
if (check == true){
console.log("弹幕在ON的状态下");
$("#idonofflabel").removeClass("danmuswitch-label danmuswitch-label-nochose")
$("#idonofflabel").addClass("danmuswitch-label danmuswitch-label-chose")
$("#idoffradio").addClass("danmuswitch-switch-click");
$("#iddanmulabel").removeClass("danmulabel danmulabel-nochose")
$("#iddanmulabel").addClass("danmulabel danmulabel-chose")
} else {
console.log("弹幕在OFF的状态下");
$("#idonofflabel").removeClass("danmuswitch-label danmuswitch-label-chose")
$("#idonofflabel").addClass("danmuswitch-label danmuswitch-label-nochose")
$("#idoffradio").removeClass("danmuswitch-switch-click");
$("#iddanmulabel").removeClass("danmulabel danmulabel-chose")
$("#iddanmulabel").addClass("danmulabel danmulabel-nochose")
}
}
function onclickMute() {
//点击静音
player.muted();
}
function getProgress(){
var percent = video.currentTime / video.duration;
playProgress.style.width = percent * (progressWrap.offsetWidth) - 2 + "px";
showProgress.innerHTML = (percent * 100).toFixed(1) + "%";
}
function formatTime(seconds) {
var guide = arguments.length <= 1 || arguments[1] === undefined ? seconds : arguments[1];
return (function () {
var s = Math.floor(seconds % 60);
var m = Math.floor(seconds / 60 % 60);
var h = Math.floor(seconds / 3600);
var gm = Math.floor(guide / 60 % 60);
var gh = Math.floor(guide / 3600);
// handle invalid times
if (isNaN(seconds) || seconds === Infinity) {
// '-' is false for all relational operators (e.g. <, >=) so this setting
// will add the minimum number of fields specified by the guide
h = m = s = '-';
}
// Check if we need to show hours
h = h > 0 || gh > 0 ? h + ':' : '';
// If hours are showing, we may need to add a leading zero.
// Always show at least one digit of minutes.
m = ((h || gm >= 10) && m < 10 ? '0' + m : m) ;
if(m<10){
m='0'+m
}
m=m+ ':';
// Check if leading zero is need for seconds
s = s < 10 ? '0' + s : s;
return h + m + s;
})();
}
function changeVideo(type){
var ctime=videojs("idVideo").currentTime();
if(type==1){
videojs("idVideo").src([{type: "video/mp4", src: "http://obukb5fdy.bkt.clouddn.com/icevideo/video/nayuta.mp4" }]);
videojs("idVideo").play();
}
if(type==2){
videojs("idVideo").src([{type: "video/mp4", src: "http://video.vmceshi.com/5d25d6f16a2e4b70ad4836cd0d500867/9a0de28e4a404b579ddd96877c51df76-4f0c74d88fd098a4cdde91670b2a02a2.mp4?auth_key=1515575471-0-0-e73a204c6d9ee11a81c438153f65d99a" }]);
videojs("idVideo").play();
}
if(type==3){
videojs("idVideo").src([{type: "video/mp4", src: "http://obukb5fdy.bkt.clouddn.com/icevideo/video/nayuta.mp4" }]);
videojs("idVideo").play();
}
window.obj.ctime=ctime;
window.obj.tag=true;
}
function fast(type){
if(type==1){
player.playbackRate(1);
}
if(type==2){
player.playbackRate(0.5);
}
if(type==3){
player.playbackRate(2);
}
}