7421 lines
215 KiB
JavaScript
Raw Normal View History

2025-08-10 23:09:36 +08:00
/*
* 软件名称ckplayer
* 版本:X3
* 版权www.ckplayer.com
* 开源协议MIT
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.ckplayer = factory());
}(this, function () { 'use strict';
/*
* language
* 功能静态变量,包含播放器用到的默认语言包
* 引入其它语言js后该变量将被替换成新引入的语言包
*/
var language={
play:'%E6%92%AD%E6%94%BE',
pause:'%E6%9A%82%E5%81%9C',
refresh:'%E9%87%8D%E6%92%AD',
full:'%E5%85%A8%E5%B1%8F',
exitFull:'%E9%80%80%E5%87%BA%E5%85%A8%E5%B1%8F',
webFull:'%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
exitWebFull:'%E9%80%80%E5%87%BA%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
theatre:'%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
exitTheatre:'%E9%80%80%E5%87%BA%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
volume:'%E9%9F%B3%E9%87%8F%EF%BC%9A',
muted:'%E9%9D%99%E9%9F%B3',
exitmuted:'%E6%81%A2%E5%A4%8D%E9%9F%B3%E9%87%8F',
seek:'seek%EF%BC%9A',
waiting:'%E7%BC%93%E5%86%B2',
live:'%E7%9B%B4%E6%92%AD%E4%B8%AD',
backLive:'%E8%BF%94%E5%9B%9E%E7%9B%B4%E6%92%AD',
lookBack:'%E5%9B%9E%E7%9C%8B%EF%BC%9A',
next:'%E4%B8%8B%E4%B8%80%E9%9B%86',
screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE',
smallwindows:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E6%92%AD%E6%94%BE%E5%8A%9F%E8%83%BD',
playbackrate:'%E5%80%8D%E9%80%9F',
playbackrateSuffix:'%E5%80%8D',
track:'%E5%AD%97%E5%B9%95',
noTrack:'%E6%97%A0%E5%AD%97%E5%B9%95',
definition:'%E6%B8%85%E6%99%B0%E5%BA%A6',
switchTo:'%E5%88%87%E6%8D%A2%E6%88%90%EF%BC%9A',
closeTime:'%7Bseconds%7D%E7%A7%92%E5%90%8E%E5%8F%AF%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
closeAd:'%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
second:'%E7%A7%92',
details:'%E6%9F%A5%E7%9C%8B%E8%AF%A6%E6%83%85',
copy:'%E5%A4%8D%E5%88%B6',
copySucceeded:'%E5%A4%8D%E5%88%B6%E6%88%90%E5%8A%9F%EF%BC%8C%E5%8F%AF%E8%B4%B4%E7%B2%98%EF%BC%81',
smallwindowsOpen:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%BC%80%E5%90%AF',
smallwindowsClose:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
screenshotStart:'%E6%88%AA%E5%9B%BE%E4%B8%AD%EF%BC%8C%E8%AF%B7%E7%A8%8D%E5%80%99...',
screenshotClose:'%E6%88%AA%E5%9B%BE%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
loopOpen:'%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
loopClose:'%E5%B7%B2%E5%85%B3%E9%97%AD%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
close:'%E5%85%B3%E9%97%AD',
down:'%E4%B8%8B%E8%BD%BD',
p50:'50%25',
p75:'75%25',
p100:'100%25',
timeScheduleAdjust:{
prohibit:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%8B%96%E5%8A%A8',
prohibitBackOff:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E9%87%8D%E5%A4%8D%E8%A7%82%E7%9C%8B',
prohibitForward:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E5%BF%AB%E8%BF%9B',
prohibitLookBack:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9',
prohibitForwardNotViewed:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E6%9C%AA%E8%A7%82%E7%9C%8B%E7%9A%84%E9%83%A8%E5%88%86'
},
error:{
noMessage:'%E6%9C%AA%E7%9F%A5%E9%94%99%E8%AF%AF',
supportVideoError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E7%89%88%E6%9C%AC%E5%A4%AA%E4%BD%8E%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
videoTypeError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E6%92%AD%E6%94%BE%E8%AF%A5%E8%A7%86%E9%A2%91%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
loadingFailed:'%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5',
emptied:'%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BD%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF',
screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE%E5%A4%B1%E8%B4%A5',
ajax:'Ajax%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82%E9%94%99%E8%AF%AF',
noVideoContainer:'%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%BE%E7%BD%AE%E8%A7%86%E9%A2%91%E7%9A%84%E5%AE%B9%E5%99%A8'
}
};
/*
* videoObjectDefault
* 功能静态变量,默认播放配置当外部传递过来的配置有未包含在varsDefault里的则使用varsDefault里的配置
*/
var videoObjectDefault= {
container: '',//视频容器的ID
volume: 0.8,//默认音量范围0-1
poster: '',//封面图片地址
autoplay: false,//是否自动播放
loop: false,//是否需要循环播放
live: false,//是否是直播
rotate:0,//视频旋转角度
zoom:0,//默认缩放比例
ad:null,//广告
backLive:false,//显示返回直播按钮
seek: 0,//默认需要跳转的秒数
next: null,//下一集按钮动作
loaded: '',//加载播放器后调用的函数
plug: '',//使用插件
duration:0,//视频总时间
preview: null,//预览图片对象
prompt: null,//提示点功能
crossOrigin:'',//跨域请求字符
video: null,//视频地址
type:'',//视频类型
playbackrate: 1,//默认倍速
ended:null,//结束显示的内容
webFull:false,//页面全屏按钮事件
theatre:null,//剧场模式
controls:false,//是否显示自带控制栏
rightBar:null,//是否开启右边控制栏
smallWindows:null,//是否启用小窗口模式
smallWindowsDrag:true,//当处于小窗口模式时是否可拖动播放器
screenshot:false,//截图功能是否开启
timeScheduleAdjust:1,//是否可调节播放进度,0不启用1是启用2是只能前进向右拖动3是只能后退4是只能前进但能回到第一次拖动时的位置5是看过的地方可以随意拖动
logo:'',//logo
menu:null,//右键菜单
information:{//关于
'Load:':'{loadTime} second',
'Duration:':'{duration} second',
'Size:':'{videoWidth}x{videoHeight}',
'Volume:':'{volume}%',
'Fps:':'{fps}fps',
'Sudio decoded:':'{audioDecodedByteCount} Byte',
'Video decoded:':'{videoDecodedByteCount} Byte'
},
track:null,//字幕
title:'',//视频标题
language:'',//语言包文件
barHideTime:1500,//控制栏隐藏时间
playbackrateOpen:true,//是否开启控制栏倍速选项
playbackrateList:[0.75,1,1.25,1.5,2,4],//倍速配置值
cookie:null,//开启cookie功能
domain:null,//指定cookie保存的域
cookiePath:'/',//指定cookie保存路径
documentFocusPause:false,//窗口失去焦点后暂停播放
mouseWheelVolume:2,//是否启用鼠标滚轮调节音量功能0=不启用1=启用2=全屏时才启用
keyVolume:2,//是否启用键盘控制音量调节0=不启用1=启用2=全屏时才启用
errorShow:true//是否显示错误信息
};
function ckplayerEmbed(videoObj){
/*
* rightMenu
* 功能全局变量,右键内容
* 初始化设置menu可替换该变量内容
*/
var rightMenu=[
{
title:'ckplayer',
link:'http://www.ckplayer.com'
},
{
title:'version:X3',
underline:true
},
{
title:'about',
click:'aboutShow'
}
];
var vars={},varsTemp={};//保存传递过来的videoObject
var video=null;//视频播放器对象
var duration=0;//总时间
var mutedState='';//默认静音状态
var recoveryVolume=false;//是否需要在播放时恢复音量
var waited=true;//是否缓冲结束
var paused=true;//默认暂停状态
var loadTime=0;//已加载部分
var seekTime=0;//需要跳转的时间初次播放以及切换清晰度后会用该变量记录需要seek的时间
var oldTime=0,playTime=0,firstSeekTime=-1,maxSeeTime=0;//oldTime=记录上次播放时间playTime=当前播放时间firstSeekTime=记录第一次拖动的时间,maxSeeTime=看过的最大时间
var isChangeDef=true;//是否需要重置清晰度
var playType='';//播放类别,默认=''是通过api接口播放='button'则判定是通过点击按钮播放
var msgSetTime=null,tipSetTime=null,mouseSetTime=null;//用于显示提示后自动隐藏的计时器
var adFrontSetTime=null,adPauseSetTime=null;//贴片广告和暂停广告的计时器
var closeTipFun=null;//关闭提示的函数
var closeTipMouseOut=null;//鼠标离开节点时执行的函数
var waitingMessage=true;//显示缓冲提示
var hidePreviewSetTime=null;//隐藏预览图的计时器
var pSliderMouseDown=false;//判断是否在进度条上的滑块上按下
var playbackTime=0;//记录回放时间
var loadedmetadataNum=0;//记录元数据加载成功次数,记录视频播放数量
var screenshotImg=null;//记录最新一张截图
var ad=null;//广告对象
var frontAdPlay=false,pauseAdPlay=false;//贴片广告是否播放,暂停广告是否播放
var barShow=true,rightBarShow=true;
var EventTarget=null,newEvent=null,eventTargetList=null;//注册监听
var loadedTrack=false;//默认未加载字幕
var C={};//保存播放器界面上的所有节点
var CT=null,CK=null,CM=null,CV=null;//CT=播放器容器页面中已存的CT>CK>CM>CV>video
var pugPlayer=null;//插件播放器
var hls=null;//播放hls
var loadMeta=true;//第一次加载到元数据
var app='';//平台类型
var nowRotate=0;//当前视频旋转角度
var nowZoom=100;//当前缩放比例
var smallWindowsState=false;//当前是否处理小窗口状态
var isDrag=false;//是否在播放器上按下并且拖动
var ckplayerCookie='ckplayer-player-cookie';
var cookieName='';//cookie名称
var cookieTime=0;//cookie保存时间单位
var cookieArray=[];//保存当前所有记录
var focusPause=true;//失去焦点前是否是暂停状态
var existenceObj=false;//是否使用源码里已有的dom
/*
* into
* 功能初始化调用播放器则首先调用该函数
* @obj=初始化时的配置对象videoObject
*/
var into=function(obj){
/*
* 如果未传递初始化配置对象则为player变量增加一个add函数功能相当于into
*/
if(isUndefined(obj)){
player.add=player.into=into;
return player;
}
/*
* 转码默认语言包
*/
language=decodeURIString(language);
/*
* 检查是否在顶部引入了外部语言包文件如果引入了则使用外部语言包替换进language变量
*/
if(!isUndefined(window.ckplayerLanguage)){
language=mergeObj(language,window.ckplayerLanguage);
}
/*
* 初始化注册事件函数该函数的作用是将所有相关的事件都注册进一个变量newEvent
* newEvent是提供给播放器外部监听函数使用的如监听时间player.time(function(t){console.log('已播放:'+t);});
*/
eventTarget();
/*
* 监听页面标签状态判断是否失去焦点
*/
documentHidden(function(state){
eventTarget('visibilityState',state);
});
/*
* 判断平台类型,主要是判断是否是iphone类型的平台
*/
app=getApp();
/*
* 简单复制一下初始化时的默认配置
*/
varsTemp={};
for(var key in videoObjectDefault){
varsTemp[key]=videoObjectDefault[key];
}
/*
* 如果初始化配置是字符串并且是以website:开头或url:开头的则认为需要请求一个json文件来获取配置
*/
if(valType(obj)=='string' && (obj.substr(0,8)=='website:' || obj.substr(0,4)=='url:')){
var ajaxUrl='';
if(obj.substr(0,8)=='website:'){
ajaxUrl=obj.substring(8);
}
if(obj.substr(0,4)=='url:'){
ajaxUrl=obj.substring(4);
}
ajax({url:ajaxUrl,success:function(data){
if(data){
return into(data);
}
else{
showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
return null;
}
}});
}
/*
* 如果初始化配置是一个object则进行下面的操作
*/
else if(valType(obj)=='object'){
varsTemp = standardization(varsTemp, obj);//将obj合并到varsTemp对象里
if(!isUndefined(obj['container']) && obj['container']){
CT=$(obj['container']);
if(CT){//如果播放容器存在,则调用语言判断函数
return loadLanguage(obj);
}
else{//如果播放容器不存在,则则等页面加载完成后运行
return bodyReady(obj);
}
}
else{//不存在播放容器配置则等页面加载完成后运行
return bodyReady(obj);
}
}
else{
showWindowsError(language['error']['noVideoContainer']);
return null;
}
},
/*
* bodyReady
* 功能页面加载完成后构建播放器
* @obj=初始化时的配置对象
*/
bodyReady=function (obj){
documentReady(function(){
if(!isUndefined(obj['container'])){
CT=$(obj['container']);
if(CT){//如果播放容器存在,则调用语言判断函数
return loadLanguage(obj);
}
else{
showWindowsError(language['error']['noVideoContainer']);
return null;
}
}
else{//不存在播放容器则重新判断
return ajaxWebsite(obj);
}
});
return null;
},
/*
* ajaxWebsite
* 功能页面加载完成后重新初始化
* @obj=初始化时的配置对象
*/
ajaxWebsite=function (obj){
if(valType(obj['video'])=='string' && (obj['video'].substr(0,8)=='website:' || obj['video'].substr(0,4)=='url:')){
varsTemp = standardization(varsTemp, obj);
var ajaxUrl='';
if(obj['video'].substr(0,8)=='website:'){
ajaxUrl=obj['video'].substring(8);
}
if(obj['video'].substr(0,4)=='url:'){
ajaxUrl=obj['video'].substring(4);
}
ajax({url:ajaxUrl,success:function(data){
if(data){
return into(data);
}
else{
showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
return null;
}
}});
}
else{
showWindowsError(language['error']['noVideoContainer']);
return null;
}
},
/*
* loadLanguage
* 功能加载Language
* @obj=初始化时的配置对象
*/
loadLanguage=function (obj){
vars = standardization(varsTemp, obj);
if(vars['language']){
var path=getPath('language')+vars['language']+'.js';
loadJs(path,function(){
if(!isUndefined(window['ckplayerLanguage'])){
language=mergeObj(language,window['ckplayerLanguage']);
}
return embed(obj);
});
}
else{
return embed(obj);
}
},
/*
* embed
* 功能构建播放器
* @obj=初始化时的配置对象
*/
embed=function (obj){
/*
* 判断静音状态
*/
mutedState=vars['volume']>0?false:true;
if(!isUndefined(CT) && CT!=null){
if(valType(CT)=='htmlarray'){
CT=CT.eq(0);
}
}
else{
return null;
}
/*
* 注册获取fps的函数
*/
calculationFps();
/*
* 如果video指向一个已存在的video标签对象
*/
existenceObj=valType(vars['video'])=='string' && ((vars['video'].substr(0,1)=='.' && vars['video'].indexOf('/')==-1) || vars['video'].substr(0,1)=='#');
/*
* 清空容器
*/
if(existenceObj){
CK=CT.find('.ckplayer-ckplayer')?CT.find('.ckplayer-ckplayer').eq(0):null;
if(CK){
CM=CK.find('.ck-main')?CK.find('.ck-main').eq(0):null;
}
if(CM){
CV=CM.find('.ck-video')?CM.find('.ck-video').eq(0):null;
}
}
if(!CK || !CM || !CV){
CT.htm('');
/*
* 在播放容器里新建一个总的容器
*/
CK=createlDiv('ckplayer-ckplayer');
CT.append(CK);
/*
* 在总容器里再新建一个容器
*/
CM=createlDiv('ck-main');
CK.append(CM);
/*
* 新建一个放置video标签的容器
*/
CV=createlDiv('ck-video');
CM.append(CV);
}
/*
* 如果已存在video.则先设置成空
*/
if(video){
video.remove();
video=null;
}
/*
* 如果video指向一个已存在的video标签对象则直接调用该对象
*/
if(existenceObj){
video=$(vars['video'])?$(vars['video']).eq(0):null;
}
/*
* 新建一个video标签
*/
if(!video){
video = createlVideo();
video.attr('width','100%').attr('height','100%');
CV.append(video);
}
video.volume=vars['volume'];
if(vars['autoplay']){
player.volume(0);
player.muted();
recoveryVolume=true;
video.attr('autoplay','autoplay');
paused=false;
}
else{
video.attr('preload','metadata');
}
CT.loop=vars['loop'];
if(CT.loop){
video.attr('loop','loop');
}
if(vars['controls']){
video.controls=true;
}
else{
video.controls=false;
}
try{
if(!existenceObj){
video.attr('controlslist','nodownload');
video.attr('x-webkit-airplay','true');
video.attr('x5-video-orientation','portraint');
video.attr('playsinline','true');
video.attr('webkit-playsinline','true');
video.attr('x5-playsinline','true');
}
if(vars['crossOrigin']){
video.useCORS=true;//解决跨域
video.crossOrigin=vars['crossOrigin'];//解决跨域
}
}
catch(event){}
/*
* 默认设置支持小窗口模式
*/
CT.smallWindows=true;
/*
* 默认设置不显示页面全屏按钮
*/
CT.webFull=false;
/*
* 默认设置不显示剧场模式按钮
*/
CT.theatre=false;
/*
* 加载播放器界面
*/
loadFace();
/*
* 判断是否需要默认旋转视频
*/
if(vars['rotate']>0){
player.rotate(vars['rotate']);
}
/*
* 判断是否需要默认缩放视频
*/
if(vars['zoom']>0){
player.zoom(vars['zoom']);
}
/*
* 判断是否支持video标签
*/
if(isUndefined(video.canPlayType)){
CT.error={code:5,message:language['error']['supportVideoError']};
eventTarget('error',CT.error);//注册监听error
showError();
return player;
}
/*
* 注册视频播放器内部监听监听到事件后注册给CT使用
*/
addAllListener();
/*
* 如果需要在视频播放器加载成功后调用相关函数此时则开始调用
*/
if(!isUndefined(vars['loaded'])){
if(valType(vars['loaded'])=='function'){
try{
vars['loaded'](player);
}
catch(event){}
}
else if(valType(vars['loaded'])=='string'){
try{
eval(vars['loaded']+ '(player)');
}
catch(event){}
}
}
/*
* 播放视频
*/
if(!existenceObj){
changeVideo(vars['video']);
}
else{
changeVideo(video.attr('src'));
}
/*
* 返回 播放器
*/
return player;
},
/*
* changeVideo
* 功能初始化视频地址或修改视频地址
*/
changeVideo=function (vstr){
var i=0;
if(video.attr('src') || video.htm()){
player.pause();
}
if(video.attr('src') && !existenceObj){
video.attr('src','');
video.removeAttr('src');
}
if(!isUndefined(video.textTracks) && video.textTracks.length>0){
for(i=video.find('track').length-1;i>-1;i--){
video.find('track').eq(i).remove();
}
}
if(!existenceObj){
video.htm('');
}
if(!isUndefined(vars['ad'])){
ad=vars['ad'];
}
var source='';
if(valType(vstr)=='string'){
if(vstr.substr(0,8)=='website:' || vstr.substr(0,4)=='url:'){
var ajaxUrl='';
if(vstr.substr(0,8)=='website:'){
ajaxUrl=vstr.substring(8);
}
if(vstr.substr(0,4)=='url:'){
ajaxUrl=vstr.substring(4);
}
ajax({url:ajaxUrl,success:function(data){
if(data!=null){
vars = standardization(varsTemp, data);
changeVideo(vars['video']);
}
else{
CT.error={code:8,message:language['error']['ajax']};
eventTarget('error',CT.error);//注册监听error
showError();
}
}});
return;
}
else{
if(vars['plug'] && !canPlay(vstr)){
plugPlayer(vstr);
}
else{
if(!existenceObj){
video.attr('src',vstr);
}
}
loadTrack();
}
}
else if(valType(vstr)=='array'){
for(i=0;i<vstr.length;i++){
if(valType(vstr[i])=='array'){
if(vars['plug'] && !canPlay(vstr[i][0])){
plugPlayer(vstr[i][0]);
}
else{
var type=' type="'+ vstr[i][1]+'"';
if(vstr[i].length>1){
source += '<source src="' + decodeURIComponent(vstr[i][0]) + '"' +type + '>';
}
}
}
}
if(source){
video.htm(source);
}
loadTrack();
}
else if(valType(vstr)=='object'){
if(vars['plug']){
plugPlayer(vstr);
}
else{
CT.error={code:10,message:language['error']['emptied']};
eventTarget('error',CT.error);//注册监听error
showError();
}
loadTrack();
}
if(!isUndefined(video.find('source')) && video.find('source').length>0){
video.find('source').eq(video.find('source').length-1).addListener('error',videoHandler.error);
}
checkBar();
loadLogo();
if(isChangeDef){
checkDefinition();
}
/*
* 对cookie进行相关分析
*/
if(vars['cookie']){
if(valType(vars['cookie'])=='array' && vars['cookie'].length>=2){
if(vars['cookie'][0] && valType(vars['cookie'][0])=='string'){
cookieName=vars['cookie'][0];
}
if(vars['cookie'][1] && valType(vars['cookie'][1])=='number'){
cookieTime=vars['cookie'][1];
}
}
if(valType(vars['cookie'])=='object' && !isUndefined(vars['cookie']['name'])){
cookieName=vars['cookie']['name'];
if(!isUndefined(vars['cookie']['hour']) && valType(vars['cookie']['hour'])=='number'){
cookieTime=vars['cookie']['hour'];
}
}
if(valType(vars['cookie'])=='string'){
cookieName=vars['cookie'];
}
if(cookieName){
cookieName=cookieName.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
}
}
if(!isUndefined(vars['seek']) && !seekTime){
if(valType(vars['seek'])=='number' && vars['seek']>0){
seekTime=vars['seek'];
}
if(valType(vars['seek'])=='string' && vars['seek']=='cookie' && cookieName){
var cke=player.cookie(cookieName);
if(cke){
seekTime=cke['time'];
}
}
}
},
/*
* plugPlayer
* 功能使用插件进行播放
*/
plugPlayer=function (url){
switch(vars['plug']){
case 'hls.js':
hlsPlayer(url);
break;
case 'flv.js':
flvPlayer(url);
break;
case 'mpegts.js':
mpegtsPlayer(url);
break;
case 'dash.js':
dashPlayer(url);
break;
default:
if(valType(vars['plug'])=='function'){
vars['plug'](video,url);
}
else{
CT.error={code:10,message:language['error']['emptied']};
eventTarget('error',CT.error);//注册监听error
showError();
}
break;
}
},
/*
* hlsPlayer
* 功能使用hls.js插件进行播放
*/
hlsPlayer=function (url){
var path=getPath('hls.js')+'hls.min.js';
loadJs(path,function(){
if (!isUndefined(Hls) && Hls.isSupported()) {
hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
hls.on(Hls.Events.ERROR, function(event, data){
var code=9;
var message=language['error']['loadingFailed'];
var fatal=data.fatal;
if(!isUndefined(data.response)){
if(!isUndefined(data.response.code)){
code=data.response.code;
}
if(!isUndefined(data.response.text) && data.response.text){
message=data.response.text;
}
else{
if(!isUndefined(event)){
message=event;
}
}
}
CT.error={code:code,message:message};
eventTarget('error',CT.error);//注册监听error
if(fatal){
showError();
}
});
}
else if(canPlay(url)){
video.attr('src',url);
}
});
},
/*
* flvPlayer
* 功能使用flv.js插件进行播放
*/
flvPlayer=function (url){
var path=getPath('flv.js')+'flv.min.js';
loadJs(path,function(){
if (typeof(flvjs)!='undefined' && !isUndefined(flvjs) && flvjs.isSupported()) {
var config={
type: 'flv',
url: url
};
if(valType(url)=='object'){
config=url;
}
if(vars['live']){
config['isLive']=true;
}
if(pugPlayer){
pugPlayer.pause();
pugPlayer.unload();
pugPlayer.detachMediaElement();
pugPlayer.destroy();
pugPlayer=null;
}
pugPlayer = flvjs.createPlayer(config);
pugPlayer.attachMediaElement(video);
pugPlayer.load();
pugPlayer.on(flvjs.Events.METADATA_ARRIVED, function(res){
videoHandler.loadedMetaData();
});
pugPlayer.on(flvjs.Events.ERROR, function(errorType, errorDetail, errorInfo){
CT.error={code:errorInfo['code'],message:errorInfo['msg']};
eventTarget('error',CT.error);//注册监听error
showError();
});
}
});
},
/*
* mpegtsPlayer
* 功能使用mpegts.js插件进行播放
*/
mpegtsPlayer=function (url){
var path=getPath('mpegts.js')+'mpegts.js';
loadJs(path,function(){
if (typeof(mpegts)!='undefined' && !isUndefined(mpegts) && mpegts.getFeatureList().mseLivePlayback) {
var config={
type: 'mse',
url: url
};
if(valType(url)=='object'){
config=url;
}
if(vars['live']){
config['isLive']=true;
}
if(pugPlayer){
pugPlayer.pause();
pugPlayer.unload();
pugPlayer.detachMediaElement();
pugPlayer.destroy();
pugPlayer=null;
}
pugPlayer = mpegts.createPlayer(config);
pugPlayer.attachMediaElement(video);
pugPlayer.load();
pugPlayer.on(mpegts.Events.METADATA_ARRIVED, function(res){
videoHandler.loadedMetaData();
});
pugPlayer.on(mpegts.Events.ERROR, function(errorType, errorDetail, errorInfo){
CT.error={code:errorInfo['code'],message:errorInfo['msg']};
eventTarget('error',CT.error);//注册监听error
showError();
});
}
});
},
/*
* canPlay
* 功能判断是否能支持相关视频格式
*/
canPlay=function(vStr,num){
var vTypeArr=[
{vidType:'video/ogg',codType:'theora, vorbis'},
{vidType:'video/mp4',codType:'avc1.4D401E, mp4a.40.2'},
{vidType:'video/mp4',codType:'avc1'},
{vidType:'video/mp4',codType:'hevc'},
{vidType:'video/webm',codType:'vp8.0, vorbis'},
{vidType:'video/webm',codType:'vp9'},
{vidType:'',codType:'application/x-mpegURL'},
{vidType:'',codType:'application/vnd.apple.mpegurl'}
];
var vType={
ogg:vTypeArr[0],
mp4:[vTypeArr[1],vTypeArr[2],vTypeArr[3]],
webm:[vTypeArr[4],vTypeArr[5]],
m3u8:[vTypeArr[6],vTypeArr[7]]
};
var arr=[];
var k='';
var supportType=function(obj){
var vType=obj['vidType'];
var str='';
if(vType){
str=vType+'; '+ 'codecs="' + obj['codType'] + '"';
}
else{
str=obj['codType'];
}
var sup = video.canPlayType(str);
if(sup == '') {
sup = 'no';
}
return sup;
};
var getExtension=function(filepath) {
return filepath.replace(/.+\./, '');
};
if(isUndefined(num)){
if(valType(vStr)=='string'){
if(vars['type']){
for(k in vTypeArr){
if(vTypeArr[k]['vidType']==vars['type']){
arr.push(vTypeArr[k]);
}
}
}
else{
if(getExtension(vStr) && getExtension(vStr) in vType){
var temp=vType[getExtension(vStr)];
if(valType(temp)=='array'){
for(var i=0;i<temp.length;i++){
arr.push(temp[i]);
}
}
else{
arr.push(temp);
}
}
}
}
}
else{
arr.push(vTypeArr[num]);
}
var is=false;
if(arr.length>0){
for(var i=0;i<arr.length;i++){
if(supportType(arr[i])!='no'){
is=true;
}
}
}
if(!is && !vars['plug']){
CT.error={code:6,message:language['error']['videoTypeError']};
eventTarget('error',CT.error);//注册监听error
showError();
}
return is;
},
/*
* loadFace
* 功能加载界面
*/
loadFace=function(){
//loading容器
C['loading']=createlDiv('ck-loading');
CM.append(C['loading']);
//默认控制栏容器
C['bar']=createlDiv('ck-bar');
CM.append(C['bar']);
//右侧控制栏容器
C['rightBar']=createlDiv('ck-right-bar ck-right-bar-hide');
CM.append(C['rightBar']);
//顶部容器
C['topBar']=createlDiv('ck-top-bar ck-top-bar-hide');
CM.append(C['topBar']);
//进度栏
C['bar']['pbox']=createlDiv('ck-bar-progress');
C['bar']['pbox']['bg']=createlDiv('ck-bar-progress-bg');
C['bar']['pbox']['load']=createlDiv('ck-bar-progress-load');
C['bar']['pbox']['bg'].append(C['bar']['pbox']['load']);
C['bar']['pbox']['play']=createlDiv('ck-bar-progress-play');
C['bar']['pbox']['bg'].append(C['bar']['pbox']['play']);
C['bar']['pbox']['mouseLine']=createlDiv('ck-bar-progress-mouseline');
C['bar']['pbox']['bg'].append(C['bar']['pbox']['mouseLine']);
C['bar']['pbox']['slider']=createlDiv('ck-bar-progress-slider');
C['bar']['pbox'].append(C['bar']['pbox']['bg']).append(C['bar']['pbox']['slider']);
C['bar'].append(C['bar']['pbox']);
C['bar'].mouseout(barMouseOut).mouseover(barMouseOver);
if(valType(vars['live'])=='number'){
C['bar']['pbox']['play'].css({'width':'100%'});
C['bar']['pbox']['slider'].css({'left':(100-C['bar']['pbox']['slider'].getWidth()*100/C['bar']['pbox']['bg'].getWidth())+'%'});
}
//播放暂停按钮组
C['bar']['playAndPause']=createlDiv('ck-bar-playandpause');
C['bar'].append(C['bar']['playAndPause']);
C['bar']['playAndPause']['play']=createlButton('ck-bar-btn ck-btn-play');
C['bar']['playAndPause']['play'].click(player.play);
C['bar']['playAndPause']['play'].mouseover(function(){tip(this,language['play']);});
C['bar']['playAndPause'].append(C['bar']['playAndPause']['play']);
C['bar']['playAndPause']['pause']=createlButton('ck-bar-btn ck-btn-pause');
C['bar']['playAndPause']['pause'].click(player.pause);
C['bar']['playAndPause']['pause'].mouseover(function(){tip(this,language['pause']);});
C['bar']['playAndPause'].append(C['bar']['playAndPause']['pause']);
C['bar']['playAndPause']['pause'].hide();
C['bar']['playAndPause']['refresh']=createlButton('ck-bar-btn ck-btn-refresh');
C['bar']['playAndPause']['refresh'].click(player.play);
C['bar']['playAndPause']['refresh'].mouseover(function(){tip(this,language['refresh']);});
C['bar']['playAndPause'].append(C['bar']['playAndPause']['refresh']);
//下一集按钮
C['bar']['nextEpisode']=createlDiv('ck-bar-btn ck-bar-next');
C['bar'].append(C['bar']['nextEpisode']);
C['bar']['nextEpisode'].click(nextClick).mouseover(showNextEpisode).mouseout(function(){
if(!isUndefined(C['next'])){
player.closeLayer(C['next']);
}
});
if(isUndefined(vars['next'])){
C['bar']['nextEpisode'].hide();
}
//时间显示框
var timeDefault=formatSeconds(player.time())+'/'+formatSeconds(duration);
if(vars['live']){
timeDefault=language['live'];
}
C['time']=createlDiv('ck-bar-time',timeDefault);
C['bar'].append(C['time']);
//返回直播按钮
C['bar']['backLive']=createlButton('ck-btn-backlive',language['backLive']);
C['bar'].append(C['bar']['backLive']);
C['bar']['backLive'].mouseover(function(){tip(this,language['backLive']);}).click(function(){
eventTarget('backLive');
});
C['bar']['backLive'].hide();
//全屏按钮组
C['bar']['fullAndExit']=createlDiv('ck-bar-fullandexit');
C['bar'].append(C['bar']['fullAndExit']);
C['bar']['fullAndExit']['full']=createlButton('ck-bar-btn ck-btn-full');
C['bar']['fullAndExit']['full'].click(player.fullOrExit);
C['bar']['fullAndExit']['full'].mouseover(function(){tip(this,language['full']);});
C['bar']['fullAndExit'].append(C['bar']['fullAndExit']['full']);
C['bar']['fullAndExit']['exitFull']=createlButton('ck-bar-btn ck-btn-exitfull');
C['bar']['fullAndExit']['exitFull'].click(player.fullOrExit);
C['bar']['fullAndExit']['exitFull'].mouseover(function(){tip(this,language['exitFull']);});
C['bar']['fullAndExit'].append(C['bar']['fullAndExit']['exitFull']);
//网页全屏按钮
C['bar']['webFullAndExit']=createlDiv('ck-bar-webfullandexit');
C['bar'].append(C['bar']['webFullAndExit']);
C['bar']['webFullAndExit']['webFull']=createlButton('ck-bar-btn ck-btn-webfull');
C['bar']['webFullAndExit']['webFull'].click(player.webFull);
C['bar']['webFullAndExit']['webFull'].mouseover(function(){tip(this,language['webFull']);});
C['bar']['webFullAndExit'].append(C['bar']['webFullAndExit']['webFull']);
C['bar']['webFullAndExit']['exitWebFull']=createlButton('ck-bar-btn ck-btn-exitwebfull');
C['bar']['webFullAndExit']['exitWebFull'].click(player.exitWebFull);
C['bar']['webFullAndExit']['exitWebFull'].mouseover(function(){tip(this,language['exitWebFull']);});
C['bar']['webFullAndExit'].append(C['bar']['webFullAndExit']['exitWebFull']);
if(!vars['webFull']){
C['bar']['webFullAndExit'].hide();
}
//剧场模式按钮组
C['bar']['theatreAndExit']=createlDiv('ck-bar-theatreandexit');
C['bar'].append(C['bar']['theatreAndExit']);
C['bar']['theatreAndExit']['theatre']=createlButton('ck-bar-btn ck-btn-theatre');
C['bar']['theatreAndExit']['theatre'].click(player.theatre);
C['bar']['theatreAndExit']['theatre'].mouseover(function(){tip(this,language['theatre']);});
C['bar']['theatreAndExit'].append(C['bar']['theatreAndExit']['theatre']);
C['bar']['theatreAndExit']['exitTheatre']=createlButton('ck-bar-btn ck-btn-exittheatre');
C['bar']['theatreAndExit']['exitTheatre'].click(player.exitTheatre);
C['bar']['theatreAndExit']['exitTheatre'].mouseover(function(){tip(this,language['exitTheatre']);});
C['bar']['theatreAndExit'].append(C['bar']['theatreAndExit']['exitTheatre']);
if(!vars['theatre']){
C['bar']['theatreAndExit'].hide();
}
//音量容器
C['bar']['vbox']=createlDiv('ck-bar-volumebox');
C['bar'].append(C['bar']['vbox']);
C['bar']['vbox']['muted']=createlButton('ck-bar-btn ck-btn-muted');
C['bar']['vbox']['muted'].click(player.muted);
C['bar']['vbox'].append(C['bar']['vbox']['muted']);
C['bar']['vbox']['exitMuted']=createlButton('ck-bar-btn ck-btn-exitmuted');
C['bar']['vbox']['exitMuted'].click(player.exitMuted);
C['bar']['vbox'].append(C['bar']['vbox']['exitMuted']);
C['bar']['vbox']['volume']=createlDiv('ck-bar-volume');
C['bar']['vbox'].append(C['bar']['vbox']['volume']);
C['bar']['vbox']['volume']['box']=createlDiv('ck-bar-volumex');
C['bar']['vbox']['volume'].append(C['bar']['vbox']['volume']['box']);
C['bar']['vbox']['volume']['txt']=createlDiv('ck-bar-volume-txt','0');
C['bar']['vbox']['volume']['box'].append(C['bar']['vbox']['volume']['txt']);
C['bar']['vbox']['volume']['bg']=createlDiv('ck-bar-volume-bg');
C['bar']['vbox']['volume']['box'].append(C['bar']['vbox']['volume']['bg']);
C['bar']['vbox']['volume']['pp']=createlDiv('ck-bar-volume-pp');
C['bar']['vbox']['volume']['bg'].append(C['bar']['vbox']['volume']['pp']);
C['bar']['vbox']['volume']['slider']=createlDiv('ck-bar-volume-slider');
C['bar']['vbox']['volume']['box'].append(C['bar']['vbox']['volume']['slider']);
C['bar']['vbox']['mouseDown']=false;
C['bar']['vbox']['volume'].show();
changeVolumeSlider(vars['volume']);
volumeDragY();//注册音量调节滑块动作
C['bar']['vbox']['volume'].attr('style','');
C['bar']['vbox'].mouseover(function(){changeVolumeSlider(video.muted?0:video.volume);});
//播速容器
C['bar']['playbackrate']=createlDiv('ck-bar-playbackrate-box');
C['bar'].append(C['bar']['playbackrate']);
C['bar']['playbackrate']['button']=createlDiv('ck-bar-playbackrate',language['playbackrate']);
C['bar']['playbackrate'].append(C['bar']['playbackrate']['button']);
C['bar']['playbackrate']['bgbox']=createlDiv('ck-bar-playbackrate-bg-box ck-list-bg-box');
C['bar']['playbackrate'].append(C['bar']['playbackrate']['bgbox']);
checkPlaybackrate();
//字幕容器
C['bar']['track']=createlDiv('ck-bar-track-box');
C['bar'].append(C['bar']['track']);
C['bar']['track']['button']=createlDiv('ck-bar-track',language['track']);
C['bar']['track'].append(C['bar']['track']['button']);
C['bar']['track']['bgbox']=createlDiv('ck-bar-track-bg-box ck-list-bg-box');
C['bar']['track'].append(C['bar']['track']['bgbox']);
C['bar']['track'].hide();
//清晰度容器
C['bar']['definition']=createlDiv('ck-bar-definition-box');
C['bar'].append(C['bar']['definition']);
C['bar']['definition']['button']=createlDiv('ck-bar-definition',language['definition']);
C['bar']['definition'].append(C['bar']['definition']['button']);
C['bar']['definition']['bgbox']=createlDiv('ck-bar-definition-bg-box ck-list-bg-box');
C['bar']['definition'].append(C['bar']['definition']['bgbox']);
C['bar']['definition'].hide();
//截图按钮
C['rightBar']['screenshot']=createlButton('ck-bar-btn ck-btn-screenshot');
C['rightBar'].append(C['rightBar']['screenshot']);
C['rightBar']['screenshot'].mouseover(function(){tip(this,language['screenshot'],null,'left');});
C['rightBar']['screenshot'].click(player.screenshot);
//小窗口按钮组
C['rightBar']['smallwindows']=createlDiv('ck-right-bar-smallwindows');
C['rightBar'].append(C['rightBar']['smallwindows']);
C['rightBar']['smallwindows']['open']=createlButton('ck-bar-btn ck-btn-smallwindows-open');
C['rightBar']['smallwindows']['open'].click(function(){tip(this,language['smallwindowsClose'],null,'left');player.smallWindows(false);});
C['rightBar']['smallwindows']['open'].mouseover(function(){tip(this,language['smallwindowsOpen'],null,'left');});
C['rightBar']['smallwindows'].append(C['rightBar']['smallwindows']['open']);
C['rightBar']['smallwindows']['close']=createlButton('ck-bar-btn ck-btn-smallwindows-close');
C['rightBar']['smallwindows']['close'].click(function(){tip(this,language['smallwindowsOpen'],null,'left');player.smallWindows(true)});
C['rightBar']['smallwindows']['close'].mouseover(function(){tip(this,language['smallwindowsClose'],null,'left');});
C['rightBar']['smallwindows'].append(C['rightBar']['smallwindows']['close']);
//循环按钮组
C['rightBar']['loop']=createlDiv('ck-right-bar-loop');
C['rightBar'].append(C['rightBar']['loop']);
C['rightBar']['loop']['open']=createlButton('ck-bar-btn ck-btn-loop-open');
C['rightBar']['loop']['open'].click(function(){tip(this,language['loopClose'],null,'left');player.loop(false);});
C['rightBar']['loop']['open'].mouseover(function(){tip(this,language['loopOpen'],null,'left');});
C['rightBar']['loop'].append(C['rightBar']['loop']['open']);
C['rightBar']['loop']['close']=createlButton('ck-bar-btn ck-btn-loop-close');
C['rightBar']['loop']['close'].click(function(){tip(this,language['loopOpen'],null,'left');player.loop(true);});
C['rightBar']['loop']['close'].mouseover(function(){tip(this,language['loopClose'],null,'left');});
C['rightBar']['loop'].append(C['rightBar']['loop']['close']);
C['rightBar'].mouseout(rightBarMouseOut).mouseover(rightBarMouseOver);
//截图显示容器
C['screenshot']=createlDiv('ck-screenshot');
CM.append(C['screenshot']);
C['screenshot']['img']=createlDiv('ck-screenshot-img');
C['screenshot'].append(C['screenshot']['img']);
C['screenshot']['bar']=createlDiv('ck-screenshot-bar');
C['screenshot'].append(C['screenshot']['bar']);
C['screenshot']['bar']['down']=createlA(language['down'],'','ck-screenshot-btn ck-screenshot-down');
C['screenshot']['bar'].append(C['screenshot']['bar']['down']);
C['screenshot']['bar']['close']=createlButton('ck-screenshot-btn ck-screenshot-close',language['close']);
C['screenshot']['bar']['close'].click(player.closeScreenshot);
C['screenshot']['bar'].append(C['screenshot']['bar']['close']);
//顶部内容
C['topBar']['zoomEle']=createlDiv('ck-top-bar-zoom');
C['topBar']['zoomEle']['zoom50']=createlDiv('ck-top-bar-zoom-container');
C['topBar']['zoomEle'].append(C['topBar']['zoomEle']['zoom50']);
C['topBar']['zoomEle']['zoom50']['left']=createlDiv('ck-top-bar-zoom-left');
C['topBar']['zoomEle']['zoom50'].append(C['topBar']['zoomEle']['zoom50']['left']);
C['topBar']['zoomEle']['zoom50']['left']['button']=createlDiv('ck-top-bar-zoom-button-50');
C['topBar']['zoomEle']['zoom50']['left'].append(C['topBar']['zoomEle']['zoom50']['left']['button']);
C['topBar']['zoomEle']['zoom50']['right']=createlDiv('ck-top-bar-zoom-right',language['p50']);
C['topBar']['zoomEle']['zoom50'].append(C['topBar']['zoomEle']['zoom50']['right']);
C['topBar']['zoomEle']['zoom50'].click(function(){player.zoom(50);});
C['topBar']['zoomEle']['zoom75']=createlDiv('ck-top-bar-zoom-container');
C['topBar']['zoomEle'].append(C['topBar']['zoomEle']['zoom75']);
C['topBar']['zoomEle']['zoom75']['left']=createlDiv('ck-top-bar-zoom-left');
C['topBar']['zoomEle']['zoom75'].append(C['topBar']['zoomEle']['zoom75']['left']);
C['topBar']['zoomEle']['zoom75']['left']['button']=createlDiv('ck-top-bar-zoom-button-75');
C['topBar']['zoomEle']['zoom75']['left'].append(C['topBar']['zoomEle']['zoom75']['left']['button']);
C['topBar']['zoomEle']['zoom75']['right']=createlDiv('ck-top-bar-zoom-right',language['p75']);
C['topBar']['zoomEle']['zoom75'].append(C['topBar']['zoomEle']['zoom75']['right']);
C['topBar']['zoomEle']['zoom75'].click(function(){player.zoom(75);});
C['topBar']['zoomEle']['zoom100']=createlDiv('ck-top-bar-zoom-container');
C['topBar']['zoomEle'].append(C['topBar']['zoomEle']['zoom100']);
C['topBar']['zoomEle']['zoom100']['left']=createlDiv('ck-top-bar-zoom-left');
C['topBar']['zoomEle']['zoom100'].append(C['topBar']['zoomEle']['zoom100']['left']);
C['topBar']['zoomEle']['zoom100']['left']['button']=createlDiv('ck-top-bar-zoom-button-100');
C['topBar']['zoomEle']['zoom100']['left'].append(C['topBar']['zoomEle']['zoom100']['left']['button']);
C['topBar']['zoomEle']['zoom100']['right']=createlDiv('ck-top-bar-zoom-right',language['p100']);
C['topBar']['zoomEle']['zoom100'].append(C['topBar']['zoomEle']['zoom100']['right']);
C['topBar']['zoomEle']['zoom100'].click(function(){player.zoom(100);});
C['topBar'].append(C['topBar']['zoomEle']);
C['topBar']['titleEle']=createlDiv('ck-top-bar-title',vars['title']);
C['topBar'].append(C['topBar']['titleEle']);
C['topBar']['timeEle']=createlDiv('ck-top-bar-time');
C['topBar'].append(C['topBar']['timeEle']);
//中间播放按钮
C['centerPlay']=createlDiv('ck-center-play');
C['centerPlay'].click(player.play);
CM.append(C['centerPlay']);
//buff
C['buffer']=createlDiv('ck-buffer');
CM.append(C['buffer']);
//消息提示框
C['message']=createlDiv('ck-message');
CM.append(C['message']);
//消息Tip框
C['tip']=createlDiv('ck-tip');
CM.append(C['tip']);
C['tip']['content']=createlDiv('ck-content ck-content-float-auto');
C['tip'].append(C['tip']['content']);
C['tip']['triangle']=createlDiv('ck-triangle ck-triangle-auto');
C['tip'].append(C['tip']['triangle']);
tip(video,'ckplayer');//初始化显示,为了获取高度
C['tip'].minHeight=C['tip'].getHeight();
tip();
//贴片广告层
C['ad']=createlDiv('ck-yytf');
CM.append(C['ad']);
C['ad']['link']=createlDiv('ck-yytf-front-link');
C['ad'].append(C['ad']['link']);
C['ad']['link'].click(frontVideoClickHandler);
C['ad']['picture']=createlDiv('ck-yytf-front-picture');
C['ad'].append(C['ad']['picture']);
C['ad']['top']=createlDiv('ck-yytf-top');
C['ad'].append(C['ad']['top']);
C['ad']['top']['countDown']=createlDiv('ck-yytf-countdown');
C['ad']['top'].append(C['ad']['top']['countDown']);
C['ad']['top']['closeTime']=createlDiv('ck-yytf-closetime');
C['ad']['top'].append(C['ad']['top']['closeTime']);
C['ad']['top']['closeAd']=createlDiv('ck-yytf-closead',language['closeAd']);
C['ad']['top'].append(C['ad']['top']['closeAd']);
C['ad']['top']['closeAd'].click(closeFrontAd);
C['ad']['bottom']=createlDiv('ck-yytf-bottom');
C['ad'].append(C['ad']['bottom']);
C['ad']['bottom']['fullAndExit']=createlDiv('ck-yytf-fullandexit');
C['ad']['bottom'].append(C['ad']['bottom']['fullAndExit']);
C['ad']['bottom']['fullAndExit']['full']=createlButton('ck-yytf-btn ck-yytf-fullandexit-full');
C['ad']['bottom']['fullAndExit']['full'].click(player.full);
C['ad']['bottom']['fullAndExit'].append(C['ad']['bottom']['fullAndExit']['full']);
C['ad']['bottom']['fullAndExit']['exitFull']=createlButton('ck-yytf-btn ck-yytf-fullandexit-exitfull');
C['ad']['bottom']['fullAndExit'].append(C['ad']['bottom']['fullAndExit']['exitFull']);
C['ad']['bottom']['fullAndExit']['exitFull'].click(player.exitFull);
C['ad']['bottom']['mutedAndExit']=createlDiv('ck-yytf-mutedandexit');
C['ad']['bottom'].append(C['ad']['bottom']['mutedAndExit']);
C['ad']['bottom']['mutedAndExit']['muted']=createlButton('ck-yytf-btn ck-yytf-mutedandexit-muted');
C['ad']['bottom']['mutedAndExit'].append(C['ad']['bottom']['mutedAndExit']['muted']);
C['ad']['bottom']['mutedAndExit']['muted'].click(player.muted);
C['ad']['bottom']['mutedAndExit']['exitMuted']=createlButton('ck-yytf-btn ck-yytf-mutedandexit-exitmuted');
C['ad']['bottom']['mutedAndExit'].append(C['ad']['bottom']['mutedAndExit']['exitMuted']);
C['ad']['bottom']['mutedAndExit']['exitMuted'].click(player.exitMuted);
C['ad']['bottom']['details']=createlDiv('ck-yytf-details',language['details']);
C['ad']['bottom'].append(C['ad']['bottom']['details']);
C['ad'].hide();
//暂停广告层
C['adPause']=createlDiv('ck-pause-yytf');
CM.append(C['adPause']);
//关于视频
C['about']=createlDiv('ck-about');
CM.append(C['about']);
C['about']['bar']=createlDiv('ck-about-bar');
C['about'].append(C['about']['bar']);
C['about']['bar']['copy']=createlButton('ck-bar-btn ck-btn-about-copy');
C['about']['bar'].append(C['about']['bar']['copy']);
C['about']['bar']['copy'].click(aboutCopy);
C['about']['bar']['copy'].mouseover(function(){tip(this,language['copy'],null,'left');});
C['about']['bar']['close']=createlButton('ck-bar-btn ck-btn-about-close');
C['about']['bar']['close'].click(aboutHide);
C['about']['bar']['close'].mouseover(function(){tip(this,language['close'],null,'left');});
C['about']['bar'].append(C['about']['bar']['close']);
C['tempTime']=createlDiv('ck-tempTime');
CM.append(C['tempTime']);
C['bar']['playAndPause']['refresh'].hide();
if(vars['controls']){
player.bar(false);
player.rightBar(false);
C['loading'].hide();
C['centerPlay'].hide();
}
else{
loadLogo();//加载logo
loadAbout();//构建关于视频相关内容
loadMenu();//构建右键
}
if(app=='iphone'){
C['loading'].hide();
}
changeTopTime();//修改顶部时间
CK.mouseout(function(){
if(!paused){
hideBar();
}
}).mouseover(function(){
if(!C['bar'].hasClass('ck-bar-out')){
C['bar'].removeClass('ck-bar-out');
CM.removeClass('ck-nocursor');
}
if(C['rightBar'].css('display')=='block'){
C['rightBar'].removeClass('ck-right-bar-hide');
}
if(C['topBar'].css('display')=='block'){
C['topBar'].removeClass('ck-top-bar-hide');
}
}).mousemove(function(){
if(C['bar'].hasClass('ck-bar-out')){
C['bar'].removeClass('ck-bar-out');
eventTarget('mouseActive',true);
CM.removeClass('ck-nocursor');
hideBar();
}
if(C['rightBar'].css('display')=='block'){
C['rightBar'].removeClass('ck-right-bar-hide');
}
if(C['topBar'].css('display')=='block'){
C['topBar'].removeClass('ck-top-bar-hide');
}
});
},
/*
* addAllListener
* 功能注册播放器的全部监听
*/
addAllListener=function(){
video.addListener('stalled',videoHandler.stalled);//在浏览器不论何种原因未能取回媒介数据时运行的脚本
video.addListener('suspend',videoHandler.suspend);//在媒介数据完全加载之前不论何种原因终止取回媒介数据时运行的脚本
video.addListener('loadeddata',videoHandler.loadedData);//监听视频数据已加载
video.addListener('loadstart',videoHandler.loadStart);//在文件开始加载且未实际加载任何数据前运行的脚本
video.addListener('loadedmetadata',videoHandler.loadedMetaData);//监听视频元数据
video.addListener('canplay',videoHandler.canPlay);//当文件就绪可以开始播放时运行的脚本(缓冲已足够开始时)
video.addListener('timeupdate',videoHandler.timeUpDate);//监听视频播放时间
video.addListener('seeking',videoHandler.seeking);//监听视频跳转中
video.addListener('seeked',videoHandler.seeked);//监听视频跳转
video.addListener('waiting',videoHandler.waiting);//监听视频缓冲
video.addListener('play',videoHandler.play);//监听视频播放事件
video.addListener('pause',videoHandler.pause);//监听视频暂停事件
video.addListener('volumechange',videoHandler.volumeChange);//监听音量改变
video.addListener('ended',videoHandler.ended);//监听播放结束
video.addListener('error',videoHandler.error);//监听发生故障并且文件突然不可用时运行的脚本(比如连接意外断开时)
if(!isUndefined(video.emptied)){
video.addListener('emptied',videoHandler.emptied);//监听播放结束
}
//CV.singleClick(player.playOrPause);//监听视频单击
CV.singleClick(function(){
if(!isDrag){
player.playOrPause();
}
else{
isDrag=false;
}
});
CM.doubleClick(player.fullOrExit);//监听视频双击
$(document).addListener('keydown',videoHandler.keydown);//监听键盘按键
addListener(window, 'resize', videoHandler.resize);//监听窗口尺寸变化
if(!isUndefined(vars['smallWindows'])){
if(valType(vars['smallWindows'])=='boolean' && vars['smallWindows']){
addListener(window, 'scroll', windowScroll);//监听窗口滚动
}
}
CT.mouseWheel(videoHandler.mouseWheel);
},
/*
* eventTarget
* 功能注册事件将事件注册给CT对象供外部监听
*/
eventTarget=function(name,obj){
try{
if(EventTarget!=null){
if(isUndefined(obj)){
obj=null;
}
newEvent.dispatchEvent(name,obj);
}
else{
EventTarget = function() {
this.listeners = {};
};
EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function(type, callback) {
if(!(type in this.listeners)) {
this.listeners[type] = [];
}
this.listeners[type].push(callback);
eventTargetList=this.listeners;
};
EventTarget.prototype.removeEventListener = function(type, callback) {
if(!(type in this.listeners)) {
return;
}
var stack = this.listeners[type];
for(var i = 0, l = stack.length; i < l; i++) {
if(stack[i] === callback) {
stack.splice(i, 1);
return this.removeEventListener(type, callback);
}
}
eventTargetList=stack;
};
EventTarget.prototype.dispatchEvent = function(type,obj) {
if(!(type in this.listeners)) {
return;
}
var stack = this.listeners[type];
for(var i = 0, l = stack.length; i < l; i++) {
stack[i].call(this, obj);
}
};
newEvent = new EventTarget();
}
}
catch(event){console.error(event)}
},
/*
* changeCookie
* 功能使用cookie记录时间
*/
changeCookie=function(time){
var arr=[];
var cStr=cookie(ckplayerCookie);
var i=0,y=0;
var cTime=Math.floor(Date.now()*0.001);
time=Math.floor(time*100);
time=time*0.01;
if(!cookieTime){
cookieTime=365*24;
}
if(!cStr){
arr.push([cookieName,time,cTime+cookieTime*3600]);
}
else{
arr=stringToArray(cStr);
var have=false;
var tempArr=[[cookieName,time,cTime+cookieTime*3600]];
for(i=0;i<arr.length;i++){
if(arr[i][2]>cTime && arr[i][0]!=cookieName && y<19){
tempArr.push(arr[i]);
y++;
}
}
arr=tempArr;
}
if(arr.length>0){
cookie(ckplayerCookie,'delete',vars['domain'],vars['cookiePath']);
cookie(ckplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
}
cookieArray=arr;
},
/*
* loadTrack
* 功能加载track
*/
loadTrack=function(){
if(isUndefined(video.textTracks)){
return;
}
var i=0;
if(!isUndefined(vars['track']) && valType(vars['track'])=='array' && !video.find('track')){
var track='';
var arr=vars['track'];
C['bar']['track'].show();
for(i=0;i<arr.length;i++){
var def='';
if(!def && !isUndefined(arr[i]['default']) && arr[i]['default']){
def=' default';
}
track+='<track src="'+arr[i]['src']+'" srclang="'+arr[i]['srclang']+'" kind="'+arr[i]['kind']+'" label="'+arr[i]['label']+'"'+def+'>';
}
if(video){
var html=video.htm()+track;
video.htm(html);
}
if(video.find('track') && !loadedTrack){
loadedTrack=true;
checkTrack();
}
}
},
/*
* loadedMetaData
* 功能获取元数据后执行的函数
*/
loadedMetaData=function(){
eventTarget('loadedMetaData',{
width:CK.getWidth(),
height:CK.getHeight(),
videoWidth:CT.videoWidth,
videoHeight:CT.videoHeight,
duration:duration,
volume:CT.volume
});
eventTarget('duration',duration);
if('error' in C){
C['error'].hide();
}
replaceInformation('videoWidth',CT.videoWidth);
replaceInformation('videoHeight',CT.videoHeight);
replaceInformation('volume',parseInt(CT.volume*100));
replaceInformation('duration',parseInt(duration));
documentHidden(function(state){
if(vars['documentFocusPause']){
if(state=='show'){
if(!focusPause && paused){
player.play();
}
}
else{
focusPause=paused;
player.pause();
}
}
});
};
/*
* videoHandler
* 功能视频播放对象video注册内部监听调用函数
*/
var videoHandler={
loadStart:function(){
if(!vars['controls'] && app!='iphone'){
C['loading'].show();
}
C['centerPlay'].hide();
eventTarget('loadstart');
},
canPlay:function(){
C['loading'].hide();
eventTarget('canplay');
},
loadedData:function(){
eventTarget('loadeddata');
},
loadedMetaData:function(){
duration=this.duration;
if(!isUndefined(this.duration) && vars['duration']){
duration=vars['duration'];
}
if(!vars['live']){
C['time'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
C['tempTime'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
}
C['loading'].hide();
if(vars['poster']){
video.attr('poster',vars['poster']);
}
if(!vars['autoplay'] && !vars['controls']){
C['centerPlay'].show();
C['buffer'].hide();
}
CT.duration=duration;
CT.videoWidth=this.videoWidth;
CT.videoHeight=this.videoHeight;
CT.volume=this.volume;
if(CT.videoWidth || CT.videoHeight || duration){
loadedMetaData();
}
var len = 0;
if(!isUndefined(this.buffered)){
len=this.buffered.length;
}
if(len>0){
changeLoad();
}
if(!vars['live']){
changePreview(vars['preview']);//修改预览图片
}
else{
changePreview();//修改预览图片
}
if(!isUndefined(vars['prompt']) && valType(vars['prompt'])=='array' && !vars['live']){
changePrompt();
}
else{
deletePrompt();
}
if(isChangeDef){
checkDefinition();
isChangeDef=false;
}
pSliderMouseDown=false;
loadedmetadataNum++;
if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay'] && loadedmetadataNum>1){//如果是贴片广告播放中,则进行播放和计算
player.play();
calculationAdFrontTime(duration);//计算贴片广告的时间
}
if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && !ad['frontPlay']){//如果广告播放结束则播放正片
player.volume(vars['volume']);
player.play();
}
if(!vars['autoplay'] && loadMeta){
loadMeta=false;
player.pause();
setTimeout(player.pause,300);
}
},
timeUpDate:function(){//监听播放时间
if(!waited){
waited=true;
C['buffer'].hide();
eventTarget('buffer','end');
}
var len = this.buffered.length;
if(len>0){
changeLoad();
}
if(!duration && this.duration){
duration=this.duration;
CT.duration=duration;
CT.videoWidth=this.videoWidth;
CT.videoHeight=this.videoHeight;
if(CT.videoWidth || CT.videoHeight || duration){
loadedMetaData();
}
}
oldTime=playTime;
playTime=this.currentTime;
if(maxSeeTime<oldTime){
maxSeeTime=oldTime;
}
changeProgress(playTime);
eventTarget('time',playTime);
if(!vars['live']){
C['time'].htm(formatSeconds(playTime)+'/'+formatSeconds(duration));
C['tempTime'].htm(formatSeconds(playTime)+'/'+formatSeconds(duration));
}
if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay'] && loadedmetadataNum>1){//如果是贴片广告播放中,则进行播放
calculationAdFrontTime(duration-playTime);//计算贴片广告的时间
}
if(!isUndefined(C['error']) && C['error'].css('display')=='block'){
C['error'].hide();
}
if(cookieName){
changeCookie(playTime);
}
replaceInformation('audioDecodedByteCount',this.webkitAudioDecodedByteCount || this.audioDecodedByteCount || 0);
replaceInformation('videoDecodedByteCount',this.webkitVideoDecodedByteCount || this.videoDecodedByteCount || 0);
},
ended:function(){//监听播放结束
if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay']){//如果是贴片广告播放中,则用广告结束函数对此进行判断
adFrontEnded();
}
else{
C['bar']['playAndPause']['pause'].hide();
C['bar']['playAndPause']['play'].hide();
C['bar']['playAndPause']['refresh'].show();
eventTarget('ended');
showEnded();
message();
}
},
error:function(event){
if(!isUndefined(event.type)){
var errorInfo=this.error;
var errorBak=function(){
var code=12;
var msg=language['error']['loadingFailed'];
if(!isUndefined(errorInfo)){
if(!isUndefined(errorInfo.code)){
code=errorInfo.code;
}
if(!isUndefined(errorInfo.message)){
msg=errorInfo.message;
}
CT.error={code:code,message:msg};
showError();
}
else{
CT.error={code:code,message:msg};
if(event.target.attr('src')){
showError();
}
}
eventTarget('error',CT.error);//注册监听error
};
if(event.type=='error'){
try{
if(video.currentSrc){
ajax({url:video.currentSrc,error:function(info){
if(info && valType(info)=='object' && 'code' in info && info['code']){
CT.error=info;
eventTarget('error',CT.error);//注册监听error
showError();
}
else{
errorBak();
}
},success:function(data){
if(!data){
errorBak();
}
}});
}
else{
errorBak();
}
}
catch(event){
errorBak();
}
}
}
},
stalled:function(){
eventTarget('stalled');//注册监听error
CT.error={code:13,message:'load:stalled'};
eventTarget('error',CT.error);//注册监听error
},
suspend:function(){
eventTarget('suspend');//注册监听error
},
emptied:function(){
eventTarget('emptied');//注册监听error
CT.error={code:7,message:language['error']['emptied']};
eventTarget('error',CT.error);//注册监听error
},
seeked:function(){
if(paused){
player.play();
}
pSliderMouseDown=false;
eventTarget('seek',{time:this.currentTime,state:'seeked'});
eventTarget('seeked');
},
seeking:function(){
if(paused){
player.play();
}
var seekingTime=this.currentTime;
if(firstSeekTime==-1){
firstSeekTime=seekingTime;//记录第一次拖动的时间
}
switch(vars['timeScheduleAdjust']){
case 0://禁止拖动
if(oldTime!=seekingTime){
waitingMessage=false;
player.seek(oldTime);
message(language['timeScheduleAdjust']['prohibit']);
return;
}
break;
case 2://只能前进(向右拖动
if(seekingTime<oldTime){
waitingMessage=false;
player.seek(oldTime);
message(language['timeScheduleAdjust']['prohibitBackOff']);
return;
}
break;
case 3://是只能后退
if(seekingTime>oldTime){
waitingMessage=false;
player.seek(oldTime);
message(language['timeScheduleAdjust']['prohibitForward']);
return;
}
break;
case 4://只能前进但能回到第一次拖动时的位置
if(seekingTime<firstSeekTime){
waitingMessage=false;
player.seek(firstSeekTime);
message(language['timeScheduleAdjust']['prohibitLookBack']);
return;
}
break;
case 5://看过的地方可以随意拖动
if(seekingTime>maxSeeTime){
waitingMessage=false;
player.seek(maxSeeTime);
message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
return;
}
break;
}
eventTarget('seek',{time:seekingTime,state:'seeking'});
eventTarget('seeking');
if(!vars['live']){
C['time'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
C['tempTime'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
}
},
waiting:function(){
waited=false;
eventTarget('buffer','start');//注册监听视频缓冲
C['centerPlay'].hide();
if(!vars['controls']){
C['buffer'].show();
}
if(!waitingMessage){
waitingMessage=true;
}
else{
message(language['waiting']);
}
},
play:function(){
paused=false;
C['bar']['playAndPause']['play'].hide();
C['bar']['playAndPause']['pause'].show();
C['bar']['playAndPause']['refresh'].hide();
C['centerPlay'].hide();
if(playType=='button'){
C['bar']['pbox'].removeClass('ck-bar-progress-out');
}
else{
C['bar']['pbox'].addClass('ck-bar-progress-out');
}
if(recoveryVolume){
recoveryVolume=false;
player.exitMuted();
}
hideBar();
closePauseAd();//关闭暂停广告
playType='';
if(!isUndefined(C['ended'])){
player.closeLayer(C['ended']);
}
if('error' in C){
C['error'].hide();
}
eventTarget('play');
if(!isUndefined(ad)){//如果存在广告
if(!isUndefined(ad['front'])){//如果存在贴片广告
if(isUndefined(ad['frontPlay'])){//如果贴片广告还未播放
ad['frontPlayI']=0;
ad['frontPlay']=true;//开始播放贴片广告
player.pause();//暂停视频
adFrontPlay();
return;
}
}
}
if(seekTime && (isUndefined(vars['live']) || (!isUndefined(vars['live']) && valType(vars['live'])=='boolean' && !vars['live'])) && seekTime<parseInt(duration*100)*0.01){//如果默认需要跳转则进行seek
player.seek(seekTime);
seekTime=0;
}
},
pause:function(){
paused=true;
if(isUndefined(ad) || isUndefined(ad['frontPlay']) || (!isUndefined(ad['frontPlay']) && !ad['frontPlay'])){//如果是贴片广告播放中,则进行播放和计算
if(!isUndefined(ad) && !isUndefined(ad['pause'])){
if(isUndefined(ad['pausePlayI'])){//如果贴片广告还未播放
ad['pausePlayI']=0;
}
adPausePlay();//播放暂停广告
}
else{
if(!vars['controls']){
C['centerPlay'].show();
C['buffer'].hide();
}
}
}
else{
if(!vars['controls']){
C['centerPlay'].show();
C['buffer'].hide();
}
}
C['bar']['playAndPause']['pause'].hide();
C['bar']['playAndPause']['play'].show();
C['bar']['playAndPause']['refresh'].hide();
C['bar']['pbox'].removeClass('ck-bar-progress-out');
checkProgressSlider();
eventTarget('pause');
C['bar'].removeClass('ck-bar-out');
CM.removeClass('ck-nocursor');
},
volumeChange:function(){
if(this.volume==0 && !mutedState){
this.muted=true;
}
if(this.volume>0 && mutedState){
this.muted=false;
}
if(mutedState!=this.muted){
mutedState=this.muted;
changeMuted(this.muted);
CT.muted=this.muted;
eventTarget('muted',CT.muted);//注册静音事件
}
CT.volume=this.volume;
eventTarget('volume',this.volume);//注册音量事件
if(!isUndefined(C['bar']['vbox'])){
var vol=parseInt(this.volume*100);
C['bar']['vbox']['volume']['txt'].htm(vol);
if(!C['bar']['vbox']['mouseDown']){
changeVolumeSlider(this.muted?0:this.volume);
}
if(!this.muted){//如果非静音状态
message(language['volume']+vol+'%');
}
}
replaceInformation('volume',parseInt(this.volume*100));
},
resize:function(){
var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement;
if(fullState) {
C['bar']['fullAndExit']['exitFull'].show();
C['bar']['fullAndExit']['full'].hide();
C['ad']['bottom']['fullAndExit']['exitFull'].show();
C['ad']['bottom']['fullAndExit']['full'].hide();
if(!CM.hasClass('ck-main-full')){
CM.addClass('ck-main-full');
}
message(language['full']);
C['bar']['webFullAndExit'].hide();
C['bar']['theatreAndExit'].hide();
if(!isUndefined(C['menu'])){
CM.append(C['menu']);
}
}
else {
fullState=false;
C['bar']['fullAndExit']['full'].show();
C['bar']['fullAndExit']['exitFull'].hide();
C['ad']['bottom']['fullAndExit']['full'].show();
C['ad']['bottom']['fullAndExit']['exitFull'].hide();
if(CM.hasClass('ck-main-full')){
CM.removeClass('ck-main-full');
}
if(!isUndefined(vars['webFull']) && vars['webFull']){
C['bar']['webFullAndExit'].show();
}
if(!isUndefined(vars['theatre']) && !CT.webFull){
C['bar']['theatreAndExit'].show();
}
if(!isUndefined(C['menu'])){
$('body').append(C['menu']);
}
if(CV.css('width')!=CM.css('width')){
player.zoom(100);
}
}
if(CT.full!=fullState){
CT.full=fullState;
eventTarget('full',fullState);//注册播放事件
}
checkVideoRotate();
changeProgress(player.time());
},
keydown:function(event){
event=window.event || event;
var keycode = event.keyCode || event.which;
var v=player.volume();
var pre=function(){
if(event.preventDefault){
event.preventDefault();
}
else{
event.returnValue = false;
}
};
switch(keycode) {
case 32:
pre();
player.playOrPause();
break;
case 37:
player.fastBack();
break;
case 39:
player.fastNext();
break;
case 38:
if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
pre();
player.volume(v+.1<1?v+=.1:1);
}
break;
case 40:
if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
pre();
player.volume(v-.1>0?v-=.1:0);
}
break;
default:
break;
}
},
mouseWheel:function(event){
if(valType(vars['mouseWheelVolume'])=='number' && (vars['mouseWheelVolume']==1 || (vars['mouseWheelVolume']==2 && CT.full))){
event=window.event || event;
var v=player.volume();
if(event.preventDefault){
event.preventDefault();
}
else{
event.returnValue = false;
}
if(event.wheelDelta) {
if(event.wheelDelta > 0) {
player.volume(v+.1<1?v+=.1:1);
}
if(event.wheelDelta < 0) {
player.volume(v-.1>0?v-=.1:0);
}
} else if(event.detail) {
if(event.detail > 0) {
player.volume(v-.1>0?v-=.1:0);
}
if(event.detail < 0) {
player.volume(v+.1<1?v+=.1:1);
}
}
}
}
};
/*
* adFrontPlay
* 功能播放贴片广告
*/
var adFrontPlay=function(){
if(ad['frontPlayI']==0){//如果是播放第一个广告,则显示相关组件
allBarHide(false);
C['ad'].show();
ad['front']['video']=false;//初始化,不包含视频广告
//判断是否需要启用固定时间后关闭广告按钮
if(!isUndefined(ad['front']['closeTime'])){
if(ad['front']['closeTime']>0){
C['ad']['top']['closeTime'].show();
adFrontCloseTime();
}
else{
C['ad']['top']['closeAd'].show();
}
}
}
if(!isUndefined(ad['front']['node']) && ad['front']['node']!=null){
CM.append(ad['front']['node']);
player.closeLayer(ad['front']['node']);
ad['front']['node']=null;
}
C['ad']['picture'].htm('');
C['ad']['picture'].hide();
C['ad']['link'].hide();
if(!isUndefined(ad['front']['list'][ad['frontPlayI']])){
var adv=ad['front']['list'][ad['frontPlayI']];
frontAdPlay=true;//贴片广告播放状态
eventTarget('frontAd',adv);
if(adv['type']=='picture'){
adPicturePlay(adv);
}
else if(adv['type']=='node'){
adNode(adv);
}
else{
C['ad']['link'].attr('data-link',adv['link']);
adVideoPlay(adv['file']);
}
if(!isUndefined(adv['link'])){
C['ad']['bottom']['details'].show();
C['ad']['bottom']['details'].htm('<a href="'+adv['link']+'" target="blank">'+language['details']+'</a>');
}
else{
C['ad']['bottom']['details'].hide();
}
}
},
/*
* adFrontCloseTime
* 功能播放贴片广告时按指定时间后显示关闭广告按钮
*/
adFrontCloseTime=function(){
if(!isUndefined(ad['front']['closeSetTime'])){
clearTimeout(ad['front']['closeSetTime']);
ad['front']['closeSetTime']=null;
}
C['ad']['top']['closeTime'].htmReplace('{seconds}',ad['front']['closeTime'],language['closeTime']);
ad['front']['closeTime']--;
if(ad['front']['closeTime']>0){
ad['front']['closeSetTime']=setTimeout(adFrontCloseTime,1000);
}
else{
C['ad']['top']['closeAd'].show();
C['ad']['top']['closeTime'].hide();
}
},
/*
* calculationAdFrontTime
* 功能计算贴片广告倒计时时间以及广告是视频时用于倒计时
*/
calculationAdFrontTime=function(t){
if(!isUndefined(t)){
ad['front']['list'][ad['frontPlayI']]['time']=t;
}
ad['front']['countDown']=0;
for(var i=ad['frontPlayI'];i<ad['front']['list'].length;i++){
ad['front']['countDown']+=parseInt(ad['front']['list'][i]['time']);
}
C['ad']['top']['countDown'].htm(ad['front']['countDown']+language['second']);
},
/*
* clearAdFrontSetTime
* 功能关闭贴片广告倒计时的计时器
*/
clearAdFrontSetTime=function(){
if(adFrontSetTime){
clearTimeout(adFrontSetTime);
adFrontSetTime=null;
}
},
/*
* adFrontCountDown
* 功能贴片广告倒计时
*/
adFrontCountDown=function(){
clearAdFrontSetTime();
var adv=ad['front']['list'][ad['frontPlayI']];
if(adv['time']>0){
adv['time']--;
ad['front']['countDown']--;
C['ad']['top']['countDown'].htm(ad['front']['countDown']+language['second']);
adFrontSetTime=setTimeout(adFrontCountDown,1000);
}
else{
adFrontEnded();
}
},
/*
* adFrontEnded
* 功能贴片广告单个播放完成后进行判断是否需要播放下一个广告还是播放正片
*/
adFrontEnded=function(){
if(ad['frontPlayI']<ad['front']['list'].length-1){
ad['frontPlayI']++;
adFrontPlay();
}
else{//贴片广告播放完成
if(!isUndefined(ad['front']['node']) && ad['front']['node']!=null){
CM.append(ad['front']['node']);
player.closeLayer(ad['front']['node']);
ad['front']['node']=null;
}
C['ad']['picture'].htm('');
C['ad']['picture'].hide();
ad['frontPlay']=false;
C['ad'].hide();
allBarShow();
seekTime=vars['seek'];
if(ad['front']['video']){//如果包含视频广告
changeVideo(vars['video']);
}
else{
player.play();
}
eventTarget('frontAdEnded',true);
frontAdPlay=false;//贴片广告播放状态
}
},
/*
* adVideoPlay
* 功能贴片广告播放视频
*/
adVideoPlay=function(vstr){
if(isUndefined(vstr)) return;
C['ad']['picture'].hide();
seekTime=0;
if(video.attr('src') || video.htm()){
player.pause();
}
if(video.attr('src')){
video.attr('src','');
video.removeAttr('src');
}
video.htm('');
if(vars['plug'] && !canPlay(vstr)){
switch(vars['plug']){
case 'hls.js':
hlsPlayer(vstr);
break;
case 'flv.js':
flvPlayer(vstr);
break;
case 'mpegts.js':
mpegtsPlayer(vstr);
break;
default:
CT.error={code:10,message:language['error']['emptied']};
eventTarget('error',CT.error);//注册监听error
showError();
break;
}
}
else{
video.attr('src',vstr);
}
ad['front']['video']=true;//设置包含视频广告
C['ad']['link'].show();
C['ad']['bottom']['mutedAndExit'].show();
},
/*
* adPicturePlay
* 功能贴片广告播放图片
*/
adPicturePlay=function(adv){
if(isUndefined(adv['file'])) return;
var img = null;
var imgloadNum=0;
var imgLoadHandler=function(){
C['ad']['picture'].show();
C['ad']['picture'].htm('');
img = createlImg(adv['file']);
C['ad']['picture'].append(img);
img.addListener('load',function(){
var w=this.getWidth(),h=this.getHeight();
if(w>0 || h>0){
if(adv['link']){
var a=createlA('',adv['link']);
a.append(this);
C['ad']['picture'].append(a);
}
else{
C['ad']['picture'].append(this)
}
img.unbind();
img.click(function(){
eventTarget('frontAdClick',adv);
});
}
else{
if(imgloadNum<10){
imgloadNum++;
imgLoadHandler();
}
}
});
};
imgLoadHandler();
calculationAdFrontTime();//计算时间
adFrontCountDown();//开启倒计时
C['ad']['bottom']['mutedAndExit'].hide();
},
/*
* adNode
* 功能贴片广告播放外部节点
*/
adNode=function(adv){
if(isUndefined(adv['content'])) return;
ad['front']['node']=player.layer(adv);
ad['front']['node'].css({'z-index':1});
C['ad'].append(ad['front']['node']);
ad['front']['node'].unbind();
ad['front']['node'].click(function(){
eventTarget('frontAdClick',adv);
});
calculationAdFrontTime();//计算时间
adFrontCountDown();//开启倒计时
C['ad']['bottom']['mutedAndExit'].hide();
},
/*
* frontVideoClickHandler
* 功能视频广告上方层单击事件
*/
frontVideoClickHandler=function(){
var url=C['ad']['link'].attr('data-link');
window.open(url,'_blank');
},
/*
* closeFrontAd
* 功能关闭贴片广告
*/
closeFrontAd=function(){
if(!isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['closeButtonClick'])){
if(valType(ad['front']['closeButtonClick'])=='function'){
try{
ad['front']['closeButtonClick']();
}
catch(event){console.error(event);}
}
else if(valType(ad['front']['closeButtonClick'])=='string'){
try{
eval(ad['front']['closeButtonClick']+ '()');
}
catch(event){console.error(event);}
}
}
else{
player.closeFrontAd();
}
},
/*
* adPausePlay
* 功能播放暂停广告
*/
adPausePlay=function(){
closePauseAd();
if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['list']) && ad['pause']['list'].length-1>=ad['pausePlayI']){
var adv=ad['pause']['list'][ad['pausePlayI']];
if(!isUndefined(ad['pause']['close']) && ad['pause']['close']){
ad['pauseClose']=createlButton('ck-pause-close');
ad['pauseClose'].click(function(){
C['centerPlay'].show();
C['buffer'].hide();
closePauseAd();
});
}
if(!isUndefined(adv['file'])){//图片
var img = null;
var imgloadNum=0;
var imgLoadHandler=function(){
img = createlImg(adv['file']);
C['adPause'].show();
C['adPause'].htm('');
C['adPause'].append(img);
img.addListener('load',function(){
var w=this.getWidth(),h=this.getHeight();
if(w>0 || h>0){
C['adPause'].htm('');
if(adv['link']){
var a=createlA('',adv['link']);
a.append(this);
C['adPause'].append(a);
}
else{
C['adPause'].append(this)
}
C['adPause'].css({
'width':w+'px',
'height':h+'px'
});
if(ad['pauseClose']){
C['adPause'].append(ad['pauseClose']);
}
img.click(function(){
eventTarget('pauseAdClick',adv);
});
}
else{
if(imgloadNum<10){
imgloadNum++;
imgLoadHandler();
}
}
});
};
imgLoadHandler();
}
else if(!isUndefined(adv['content'])){
ad['pause']['node']=player.layer(adv);
if(ad['pauseClose']){
ad['pause']['node'].append(ad['pauseClose']);
}
ad['pause']['node'].click(function(){
eventTarget('pauseAdClick',adv);
});
}
eventTarget('pauseAd',adv);
if(!isUndefined(adv['time']) && adv['time']>0){
adPauseSetTime=setTimeout(function(){
ad['pausePlayI']++;
if(ad['pausePlayI']>ad['pause']['list'].length-1){
ad['pausePlayI']=0;
}
adPausePlay();
},adv['time']*1000)
}
}
},
/*
* closePauseAd
* 功能关闭暂停广告
*/
closePauseAd=function(){
if(adPauseSetTime){
clearTimeout(adPauseSetTime);
adPauseSetTime=null;
}
C['adPause'].hide();
if(!isUndefined(ad) && !isUndefined(ad['pauseClose']) && ad['pauseClose']!=null){
ad['pauseClose'].remove();
ad['pauseClose']=null;
}
if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['node']) && ad['pause']['node']){
ad['pause']['node'].unbind();
player.closeLayer(ad['pause']['node']);
eventTarget('pauseAdClose');
}
};
/*
* player
* 功能:开放接口,向外部提供播放器的交互功能列表包含获取执行监听这三种功能
*/
var player={
/*
* width
* 功能获取或设置播放器宽度
* 这是一个动态的值会随着全屏切换或播放器本身尺寸变化而变化
* @value支持数字字符当存在@value时则设置播放器宽度@value为空时则获取播放器宽度
*/
width:function(value){
if(!isUndefined(value)){
if(valType(value)=='number'){
value+='px';
}
CT.css({'width':value});
checkVideoRotate();
}
return CK.getWidth();
},
/*
* height
* 功能获取或设置播放器显示高度
* 这是一个动态的值会随着全屏切换或播放器本身尺寸变化而变化
* @value支持数字字符当存在@value时则设置播放器高度@value为空时则获取播放器高度
*/
height:function(value){
if(!isUndefined(value)){
if(valType(value)=='number'){
value+='px';
}
CT.css({'height':value});
checkVideoRotate();
}
return CK.getHeight();
},
/*
* videoWidth
* 功能获取视频本身的宽度这是一个固定值
*/
videoWidth:function(){
if(video){
return video.videoWidth;
}
return null;
},
/*
* videoHeight
* 功能获取视频本身的高度这是一个固定值
*/
videoHeight:function(){
if(video){
return video.videoHeight;
}
return null;
},
/*
* height
* 功能获取或设置播放器显示高度
* 这是一个动态的值会随着全屏切换或播放器本身尺寸变化而变化
* @value支持数字字符当存在@value时则设置播放器高度@value为空时则获取播放器高度
*/
zoom:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('zoom',fn);
}
if(valType(fn)=='number'){
var arr=[C['topBar']['zoomEle']['zoom50'],C['topBar']['zoomEle']['zoom75'],C['topBar']['zoomEle']['zoom100']];
for(var i=0;i<arr.length;i++){
arr[i].removeClass('ck-top-bar-zoom-container-focus')
}
switch(fn){
case 50:
arr[0].addClass('ck-top-bar-zoom-container-focus');
break;
case 75:
arr[1].addClass('ck-top-bar-zoom-container-focus');
break;
case 100:
arr[2].addClass('ck-top-bar-zoom-container-focus');
break;
}
if(fn==50 || fn==75 || fn==100){
nowZoom=fn;
checkVideoRotate();//调整视频尺寸
eventTarget('zoom',fn);
}
}
}
return player;
},
/*
* rotate
* 提供给播放器外部使用
* 进行旋转
* @obj为新的播放配置对象
*/
rotate:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('rotate',fn);
}
if(valType(fn)=='number'){
var arr=[0,90,180,270];
var rot=0;
if(arr.length>fn && fn>0){
rot=arr[fn];
}
else{
if(arr.indexOf(fn)>-1){
rot=fn;
}
}
if(rot!=nowRotate){
eventTarget('rotate',rot);
nowRotate=rot;
checkVideoRotate();//调整视频尺寸
}
}
}
},
/*
* vars
* 提供给播放器外部使用
* 修改vars动态切换视频地址
* @obj为新的播放配置对象
*/
vars:function(obj,val){
if(isUndefined(obj)){
return;
}
if(valType(obj)=='string' && !isUndefined(val)){
var temp={};
temp[obj]=val;
obj=temp;
}
var isChange=false;
for(var k in obj){
if(k in vars && obj[k]!=vars[k]){
isChange=true;
break;
}
}
if(isChange){
vars = standardization(vars, obj);
}
if(!isUndefined(obj['video'])){
isChangeDef=true;
changeVideo(vars['video']);
}
if(!isUndefined(obj['title'])){
C['topBar']['titleEle'].htm(obj['title']);
}
},
/*
* 提供给播放器外部使用
* 功能监听视频准备加载
*/
loadstart:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('loadstart',fn);
}
},
/*
* 提供给播放器外部使用
* 功能监听视频加载
*/
loadeddata:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('loadeddata',fn);
}
},
/*
* 提供给播放器外部使用
* 功能监听视频元数据加载成功
*/
loadedMetaData:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('loadedMetaData',fn);
}
},
/*
* 提供给播放器外部使用
* 功能监听视频可以播放
*/
canplay:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('canplay',fn);
}
},
/*
* 提供给播放器外部使用
* 功能执行播放操作/监听播放
* @fn为函数时则监听视频播放@fn为空时则控制视频播放
*/
play:function(fn){
if(valType(fn)=='object'){
if(fn['target']==C['bar']['playAndPause']['play'] || fn['target']==C['bar']['playAndPause']['refresh']){
playType='button';
}
}
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('play',fn);
}
else{
if(loadedmetadataNum>0 && video){
try{video.play();}catch(event){console.error(event)}
}
}
return player;
},
/*
* puase
* 功能执行暂停操作/监听暂停
* @fn为函数时则监听视频暂停@fn为空时则控制视频暂停
*/
pause:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('pause',fn);
}
else{
if(loadedmetadataNum>0 && video){
try{video.pause();}catch(event){console.error(event)}
}
}
return player;
},
/*
* playOrPause
* 功能在播放和暂停动作之间进行切换
*/
playOrPause:function(){
if(paused){
player.play();
}
else{
player.pause();
}
return player;
},
/*
* volume
* 功能调节和监听以及获取音量
* @fn为函数时则进行音量变化的监听@fn为数字时则进行音量调节@fn为空时则获取当前音量
*/
volume:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('volume', fn);
}
else if(valType(fn)=='number' && video){
if(fn<0)fn=0;
if(fn>1)fn=1;
if(video.muted){
video.volume=fn*.5;
}
video.volume=fn;
}
}
else if(video){
return video.volume;
}
return player;
},
/*
* muted
* 功能执行静音操作/监听静音
* @fn为函数时则监听视频静音@fn为空时则控制视频静音
*/
muted:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('muted', fn);
}
else if(video){
video.muted=true;
}
return player;
},
/*
* exitMuted
* 功能执行取消静音操作
*/
exitMuted:function(){
if(video){
video.muted=false;
if(video.volume==0){
player.volume(vars['volume']>0?vars['volume']:.8);
}
}
return player;
},
/*
* time
* 功能获取当前播放时间/监听播放时间
* @fn为函数时监听当前播放时间为空时获取当前播放时间
*/
time:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('time',fn);
}
else if(video){
return video.currentTime || 0;
}
},
/*
* seek
* 功能监听跳转/执行跳转操作
* @fn为函数时则监听视频跳转动作@fn为数字时执行跳转操作
*/
seek:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('seek',fn);
}
if(valType(fn)=='number' && video){
switch(vars['timeScheduleAdjust']){
case 0://禁止拖动
message(language['timeScheduleAdjust']['prohibit']);
return;
break;
case 1://可以拖动
break;
case 2://只能前进(向右拖动
if(fn<oldTime){
message(language['timeScheduleAdjust']['prohibitBackOff']);
return;
}
break;
case 3://是只能后退
if(fn>oldTime){
message(language['timeScheduleAdjust']['prohibitForward']);
return;
}
break;
case 4://只能前进但能回到第一次拖动时的位置
if(fn<firstSeekTime){
waitingMessage=false;
video.currentTime=firstSeekTime;
message(language['timeScheduleAdjust']['prohibitLookBack']);
return;
}
break;
case 5://看过的地方可以随意拖动
if(fn>maxSeeTime){
waitingMessage=false;
video.currentTime=maxSeeTime;
message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
return;
}
break;
}
pSliderMouseDown=false;
video.currentTime=fn;
}
}
return player;
},
/*
* buffer
* 功能监听视频缓冲
* @fn为监听执行的函数
*/
buffer:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('buffer',fn);
}
return player;
},
/*
* ended
* 功能监听视频播放结束
* @fn为监听执行的函数
*/
ended:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('ended',fn);
}
return player;
},
/*
* 提供给播放器外部使用
* 功能监听点击下一集按钮的动作
*/
next:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('next',fn);
}
return player;
},
/*
* error
* 功能监听播放器在加载视频过程和播放视频过程中出现的错误
* @fn为监听执行的函数
*/
error:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('error',fn);
}
return player;
},
/*
* emptied
* 功能监听播放器播放的视频文件发生故障并且文件突然不可用时
* @fn为监听执行的函数
*/
emptied:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('emptied',fn);
}
return player;
},
/*
* duration
* 功能获取视频总时间/监听视频总时间
* @fn为函数时执行监听视频总时间为空时获取视频总时间
*/
duration:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('duration',fn);
}
else{
return duration || 0;
}
},
/*
* playbackRate
* 功能监听或返回视频播放速度
* @fn为函数时执行监听视频播放速度为数字时切换播放速度为空时获取视频播放速度
*/
playbackRate:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('playbackRate',fn);
}
else if(valType(fn)=='number' && video){
video.playbackRate=fn;
CT.playbackRate=fn;
eventTarget('playbackRate',fn);
changePlaybackrateVal(fn);
}
}
else{
return video.playbackRate;
}
},
/*
* track
* 功能监听或返回视频的字幕
* @fn为函数时执行监听视频字幕为数字时切换字幕为空时获取字幕
*/
track:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('track',fn);
}
else if(valType(fn)=='number' && video){
var track=null;
if(!isUndefined(video.textTracks)){
track=video.textTracks;
}
if(track && valType(track)=='texttracklist'){
var arr=vars['track'];
for(var i=track.length-1;i>-1;i--){
video.find('track').eq(i).remove();
}
for(var i=0;i<arr.length;i++){
var def='';
arr[i]['default']=false;
if(i==fn){
def=' default';
arr[i]['default']=true;
}
track+='<track src="'+arr[i]['src']+'" srclang="'+arr[i]['srclang']+'" kind="'+arr[i]['kind']+'" label="'+arr[i]['label']+'"'+def+'>';
}
if(video){
var html=video.htm()+track;
video.htm(html);
}
changeTrackVal(fn);
}
}
}
else{
return CT.track;
}
},
/*
* fastBack
* 功能快退
* @num为数字时快退指定秒数为空时快退20秒
*/
fastBack:function(num){
if(duration==0) return;
if(isUndefined(num) || valType(num)!='number'){
num=20;
}
var time=player.time();
if(time-num>0){
time-=num;
}
else{
time=0;
}
player.seek(time);
return player;
},
/*
* fastNext
* 功能快进
* @num为数字时快进指定秒数为空时快进20秒
*/
fastNext:function(num){
if(duration==0) return;
if(isUndefined(num) || valType(num)!='number'){
num=20;
}
var time=player.time();
if(time+num<duration){
time+=num;
}
else{
time=duration;
}
player.seek(time);
return player;
},
/*
* definition
* 功能监听清晰度切换/操作清晰度切换
* @fn为一个函数时监听清晰度切换为数字时执行清晰度切换数字为清晰度的编号从0开始
*/
definition:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('definition',fn);
}
if(valType(fn)=='number'){
changeDefinition(fn);
}
}
return player;
},
/*
* fps
* 功能监听Fps
* @fn为一个函数时监听fps为空时获取fps
*/
fps:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('fps',fn);
}
return CT.fps;
},
/*
* playback
* 功能监听回放操作/返回需要回放的时间点
*/
playback:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('playback',fn);
}
}
else{
return playbackTime;
}
return player;
},
/*
* backLive
* 功能显示/隐藏回到直播的按钮
*/
backLive:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('backLive',fn);
}
if(valType(fn)=='boolean'){
if(bool){
C['bar']['backLive'].show();
}
else{
C['bar']['backLive'].hide();
}
}
}
return player;
},
/*
* full
* 功能监听全屏功能/执行全屏操作
* @fn为函数时监听用户执行全屏操作为空时执行全屏操作
*/
full:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('full',fn);
}
else{
if(smallWindowsState){
return;
}
if(CT.theatre){
player.exitTheatre();
}
if(CT.webFull){
player.exitWebFull();
}
var requestMethod = CK.requestFullScreen || //W3C
CK.webkitRequestFullScreen || //Chrome等
CK.mozRequestFullScreen || //FireFox
CK.oRequestFullscreen ||
CK.msRequestFullscreen; //IE11
if (!isUndefined(requestMethod)) {
requestMethod.call(CK);
}
else if (!isUndefined(window.ActiveXObject)) { //for Internet Explorer
var wscript = new ActiveXObject('WScript.Shell');
if (wscript !== null) {
wscript.SendKeys('{F11}');
}
}
else if(!isUndefined(video.webkitEnterFullscreen) || !isUndefined(video.webkitEnterFullScreen)){
var fullScreen=video.webkitEnterFullscreen || video.webkitEnterFullScreen;
fullScreen.call(video);
}
player.zoom(100);
}
return player;
},
/*
* exitFull
* 功能 退出全屏
*/
exitFull:function(){
var exitFullFun = document.exitFullscreen || //W3C
document.mozCancelFullScreen || //FireFox
document.webkitExitFullscreen || //Chrome等
document.oCancelFullScreen || //Chrome等
document.msExitFullscreen; //IE11
if (!isUndefined(exitFullFun)) {
exitFullFun.call(document);
}
else if (!isUndefined(window.ActiveXObject)) { //for Internet Explorer
var wscript = new ActiveXObject('WScript.Shell');
if (wscript !== null) {
wscript.SendKeys('{F11}');
}
}
return player;
},
/*
* fullOrExit
* 功能在全屏和退出全屏之间进行切换
*/
fullOrExit:function(){
var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement;
if(fullState){
player.exitFull();
}
else{
player.full();
}
return player;
},
/*
* webFull
* 功能监听网页全屏/执行网页全屏
* @fn为函数时监听网页全屏为空时执行网页全屏
*/
webFull:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('webfull',fn);
}
else{
exitSmallWindows();
if(!isUndefined(vars['theatre'])){
C['bar']['theatreAndExit'].hide();
}
CK.css({
'position':'fixed',
'top':0,
'left':0,
'height':'100%',
'z-index':getMaxZIndex()+1
});
C['bar']['webFullAndExit']['webFull'].hide();
C['bar']['webFullAndExit']['exitWebFull'].show();
CT.webFull=true;
eventTarget('webfull',true);
checkVideoRotate();
}
return player;
},
/*
* exitWebFull
* 功能退出网页全屏
*/
exitWebFull:function(){
CK.css({
'position':'relative'
});
C['bar']['webFullAndExit']['webFull'].show();
C['bar']['webFullAndExit']['exitWebFull'].hide();
if(!isUndefined(vars['theatre'])){
C['bar']['theatreAndExit'].show();
C['bar']['theatreAndExit']['theatre'].show();
C['bar']['theatreAndExit']['exitTheatre'].hide();
}
CK.attr('style','');
CT.webFull=false;
eventTarget('webfull',false);
checkVideoRotate();
return player;
},
/*
* theatre
* 功能监听剧场模式/执行剧场模式
* @fn为函数时执行监听剧场模式为空时执行剧场模式操作
*/
theatre:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('theatre',fn);
}
else{
if(valType(vars['theatre'])=='array' && vars['theatre'].length==2){
var fun=vars['theatre'][0];
if(valType(fun)=='function'){
fun();
}
if(valType(fun)=='string'){
eval(fun+ '()');
}
}
else{
exitSmallWindows();
CK.css({
'position':'absolute',
'top':CT.offset()['top'],
'left':0,
'height':CT.getHeight()+'px',
'z-index':getMaxZIndex()+1
});
C['bar']['theatreAndExit']['theatre'].hide();
C['bar']['theatreAndExit']['exitTheatre'].show();
}
CT.theatre=true;
eventTarget('theatre',true);
checkVideoRotate();
}
return player;
},
/*
* exitTheatre
* 功能退出剧场模式
*/
exitTheatre:function(){
if(valType(vars['theatre'])=='array' && vars['theatre'].length==2){
var fun=vars['theatre'][1];
if(valType(fun)=='function'){
fun();
}
if(valType(fun)=='string'){
eval(fun+ '()');
}
}
else{
CK.css({
'position':'relative'
});
C['bar']['theatreAndExit']['theatre'].show();
C['bar']['theatreAndExit']['exitTheatre'].hide();
CK.attr('style','');
CT.theatre=false;
}
eventTarget('theatre',false);
checkVideoRotate();
return player;
},
/*
* smallWindows
* 功能监听小窗口模式开启关闭/执行开启关闭小窗口模式
*/
smallWindows:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('smallWindows',fn);
}
if(valType(fn)=='boolean'){
if(fn){
C['rightBar']['smallwindows']['open'].show();
C['rightBar']['smallwindows']['close'].hide();
CT.smallWindows=true;
}
else{
C['rightBar']['smallwindows']['open'].hide();
C['rightBar']['smallwindows']['close'].show();
CT.smallWindows=false;
}
eventTarget('smallWindows',CT.smallWindows);
checkVideoRotate();
}
}
return CT.smallWindows;
},
/*
* loop
* 功能监听循环/执行开启关闭循环功能
* @fn为函数时是监听循环@fn为boolean类型时为true开启循环为false关闭循环@fn为空时获取当前循环状态
*/
loop:function(fn){
if(!isUndefined(fn)){
if(valType(fn)=='function'){
newEvent.addEventListener('loop',fn);
}
if(valType(fn)=='boolean' && video){
if(fn){
C['rightBar']['loop']['open'].show();
C['rightBar']['loop']['close'].hide();
CT.loop=true;
video.attr('loop','loop');
eventTarget('loop',true);
}
else{
C['rightBar']['loop']['open'].hide();
C['rightBar']['loop']['close'].show();
CT.loop=false;
video.attr('loop',false);
video.removeAttr('loop');
eventTarget('loop',false);
}
}
}
return CT.loop;
},
/*
* screenshot
* 功能截图
* @fn为函数时监听截图功能@fn为空时进行截图
*/
screenshot:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('screenshot',fn);
}
else{
if(!isUndefined(vars['screenshot']) && vars['screenshot'] && video){
try {
message(language['screenshotStart'],true);
var newCanvas = $(document.createElement('canvas'));
newCanvas.width = video.videoWidth;
newCanvas.height = video.videoHeight;
newCanvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
var base64 = newCanvas.toDataURL('image/png');
eventTarget('screenshot',base64);
if(screenshotImg){
screenshotImg.remove();
screenshotImg=null;
}
screenshotImg=createlImg(base64);
screenshotImg.addListener('load',function(){
C['screenshot']['img'].append(screenshotImg);
C['screenshot'].show().css({'width':this.getWidth()+'px'});
});
var newBlob=dataURLtoBlob(base64);
var url = URL.createObjectURL(newBlob);
var downName='video';
if(vars['title']){
downName=vars['title'];
}
C['screenshot']['bar']['down'].attr('href',url).attr('download',downName);
return base64;
}catch(error) {
message(language['error']['screenshot'],true);
}
}
else{
message(language['screenshotClose'],true);
}
}
return player;
},
/*
* closeScreenshot
* 功能关闭截图显示容器
*/
closeScreenshot:function(bool){
if(!isUndefined(bool) && valType(bool)=='boolean' && !bool){
C['screenshot'].show();
}
else{
C['screenshot'].hide();
}
return player;
},
/*
* layer
* 功能在播放器中添加一个层
*/
layer:function(obj,bar){
if(isUndefined(obj)){
return null;
}
var cBar=false;
if(!isUndefined(bar)){
cBar=bar;
}
var ele=null;
if(valType(obj)=='object'){
if('class' in obj && 'content' in obj){
ele=createlDiv(obj['class']);
ele.htm(obj['content']);
}
else if('content' in obj){
obj=obj['content'];
}
}
if(valType(obj)=='string'){
if(obj.substr(0,1)=='.' || obj.substr(0,1)=='#'){
ele=getElement(obj);
}
else{
ele=createlDiv('ck-layer');
ele.htm(obj);
}
}
if(ele){
var zIndex=ele.css('z-index');
if(zIndex=='auto'){
zIndex=101;
}
if(zIndex<101) zIndex=101;
if(zIndex>200) zIndex=200;
if(isUndefined(ele.cssDisplay)){
ele.cssPosition=ele.css('position');
ele.cssDisplay=ele.css('display');
}
ele.css({
'position': 'absolute',
'z-index':zIndex
});
if(!cBar){
CM.append(ele);
}
else{
C['bar'].append(ele);
}
ele.CK=CK;
ele.show();
}
return ele;
},
/*
* closeLayer
* 功能关闭一个层
*/
closeLayer:function(ele){
if(valType(ele)=='string'){
var temp=$(ele);
if(!isUndefined(temp)){
if(temp.length>0){
ele=temp.eq(0);
}
}
}
if(!isUndefined(ele) && valType(ele)=='htmlobject'){
if(!isUndefined(ele.captureParentNode)){
var eleP=ele.captureParentNode;
if (ele.nextElement) {
try {
eleP.insertBefore(ele, ele.nextElement);
}
catch (event) {
eleP.append(ele);
}
}
else if (ele.prevElement) {
try {
eleP.insertAfter(ele, ele.prevElement);
}
catch (event) {
eleP.append(ele);
}
}
else {
eleP.append(ele);
}
ele.css({'display':ele.cssDisplay});
}
else{
ele.remove();
}
if(!isUndefined(ele.cssDisplay)){
ele.css({
'display':ele.cssDisplay,
'position':ele.cssPosition
});
}
}
return player;
},
/*
* message
* 在播放器内部显示一条提示信息
*/
message:function(str){
message(str);
return player;
},
/*
* closeFrontAd
* 功能关闭贴片广告
*/
closeFrontAd:function(){
if(frontAdPlay && !isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['list'])){
ad['frontPlayI']=ad['front']['list'].length-1;
adFrontEnded();
clearAdFrontSetTime();
}
return player;
},
/*
* addListener
* 功能监听功能
*/
addListener:function(name,fn){
newEvent.addEventListener(name,fn);
},
/*
* removeListener
* 功能监听功能
*/
removeListener:function(name,fn){
newEvent.removeEventListener(name,fn);
},
/*
* bar
* 功能显示/关闭底部控制栏
*/
bar:function(bool){
barShow=bool;
if(bool){
C['bar'].show();
}
else{
C['bar'].hide();
}
},
/*
* rightBar
* 功能显示/关闭右边控制栏
*/
rightBar:function(bool){
rightBarShow=bool;
if(bool){
C['rightBar'].show();
}
else{
C['rightBar'].hide();
}
},
/*
* mouseActive
* 功能监听鼠标是否经过播放器
*/
mouseActive:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
newEvent.addEventListener('mouseActive',fn);
}
return this;
},
/*
* cookie
* 功能读取cookie
*/
cookie:function(name){
if(name=='delete'){
cookie(ckplayerCookie,'delete',vars['domain']);
return null;
}
if(!isUndefined(name) && name){
name=name.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
}
var cStr=cookie(ckplayerCookie);
if(cStr){
var arr=stringToArray(cStr);
var tempArr=[];
var cTime=parseInt(Date.now()*0.001);
for(i=0;i<arr.length;i++){
if(parseInt(arr[i][2])>cTime){
tempArr.push(arr[i]);
}
}
arr=tempArr;
if(arr.length>0){
cookie(ckplayerCookie,'delete',vars['domain'],vars['cookiePath']);
cookie(ckplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
for(var i=0;i<arr.length;i++){
arr[i]={
name:arr[i][0],
time:arr[i][1],
expirationTime:date('Y-m-d H:i:s',arr[i][2]),
expirationTimeStamp:arr[i][2]
};
if(!isUndefined(name) && name==arr[i]['name']){
return arr[i];
}
}
return arr;
}
else{
cookie(ckplayerCookie,'delete',vars['domain'],vars['cookiePath']);
}
}
return null;
},
/*
* visibilityState
* 功能监听当前文档是否处于焦点状态
*/
visibilityState:function(fn){
if(!isUndefined(fn) && valType(fn)=='function'){
if(!isUndefined(document.visibilityState)){
fn(document.visibilityState === 'visible'?'show':'hidden');
}
newEvent.addEventListener('visibilityState',fn);
}
return this;
},
/*
* remove
* 功能卸载播放器
*/
remove:function(){
var eventTemp={};
if(eventTargetList!=null){
for(var k in eventTargetList){
eventTemp[k]=eventTargetList[k];
}
for(var k in eventTemp){
var temp=eventTemp[k];
if(temp){
for(var i=0;i<temp.length;i++){
var eve=temp[i];
newEvent.removeEventListener(k,eve);
}
}
}
}
if(frontAdPlay){
this.closeFrontAd();
}
if(pugPlayer){
pugPlayer.pause();
pugPlayer.unload();
pugPlayer.detachMediaElement();
pugPlayer.destroy();
pugPlayer=null;
}
if(hls){
hls.stopLoad();
hls.detachMedia();
}
loadedmetadataNum=0;
loadedTrack=false;
isChangeDef=true;
if(video){
video.unbind();
video.remove();
video=null;
}
if(!isUndefined(C['menu'])){
C['menu'].remove();
}
if(CT){
CT.unbind();
CT.htm('');
}
return null;
}
};
/*
* checkBar
* 功能完全获取vars值后判断控制栏上的按钮是否需要显示
* 完全获取vars是指视频加载成功后
*/
var checkBar=function(){
//初始化判断
if(vars['autoplay']){
C['bar']['playAndPause']['play'].hide();
C['bar']['playAndPause']['pause'].show();
}
else{
C['bar']['playAndPause']['play'].show();
C['bar']['playAndPause']['pause'].hide();
}
if(mutedState){
C['bar']['vbox']['muted'].hide();
}
else{
C['bar']['vbox']['exitMuted'].hide();
}
if(!isUndefined(vars['next'])){
C['bar']['nextEpisode'].show();
}
else{
C['bar']['nextEpisode'].hide();
}
if(!isUndefined(vars['webFull']) && vars['webFull'] && !CT.full){
C['bar']['webFullAndExit'].show();
}
else{
C['bar']['webFullAndExit'].hide();
}
if(!isUndefined(vars['theatre']) && !CT.full && !CT.webFull){
C['bar']['theatreAndExit'].show();
}
else{
C['bar']['theatreAndExit'].hide();
}
if(!isUndefined(vars['rightBar']) && vars['rightBar']){
C['rightBar'].show();
}
else{
C['rightBar'].hide();
}
if(!vars['live'] || valType(vars['live'])=='number'){
pSliderMouseDown=false;
progressDragX();//注册进度滑块动作
}
if(vars['live'] || valType(vars['live'])=='number'){
C['time'].htm(language['live']);
C['tempTime'].htm(language['live']);
}
if(valType(vars['smallWindows'])=='boolean' && !vars['smallWindows']){
CT.smallWindows=false;
C['rightBar']['smallwindows']['open'].hide();
C['rightBar']['smallwindows']['close'].show();
}
if(CT.loop){
C['rightBar']['loop']['open'].show();
C['rightBar']['loop']['close'].hide();
}
else{
C['rightBar']['loop']['open'].hide();
C['rightBar']['loop']['close'].show();
}
if(!isUndefined(vars['backLive']) && vars['backLive']){
C['bar']['backLive'].show();
}
if(vars['volume']==0){
player.muted();
}
},
/*
* loadLogo
* 功能加载logo
*/
loadLogo=function(){
if(!isUndefined(vars['logo']) && isUndefined(C['logo'])){
C['logo']=createlDiv('ck-logo');
createlImg(vars['logo']).addListener('load',function(){
CM.append(C['logo']);
C['logo'].append(this);
}).addListener('error',function(){C['logo'].remove()});
}
},
/*
* loadAbout
* 功能加载loadAbout
*/
loadAbout=function(){
if(!isUndefined(vars['information']) && !isUndefined(C['about']) && valType(vars['information'])=='object'){
var obj=vars['information'];
var k='';
var ul=$(document.createElement('ul'));
var temp='';
for(k in obj){
var title=createlDiv('div').attr('class','ck-about-title');
var content=createlDiv('div').attr('class','ck-about-content');
var li=$(document.createElement('li'));
title.htm(k);
content.htm(obj[k]);
li.append(title);
li.append(content);
ul.append(li);
temp+=k+':'+obj[k]+'\n';
}
C['about'].append(ul);
C['about']['textareaText']=temp;
C['about']['textareaEle']=$(document.createElement('textarea'));
CM.append(C['about']['textareaEle']);
C['about']['textareaEle'].hide()
}
},
/*
* loadMenu
* 功能加载右键
*/
loadMenu=function(){
if(!isUndefined(vars['menu']) && vars['menu']){
rightMenu=vars['menu'];
}
C['menu']=createlDiv('ckplayer-ckplayer-menu');
for(var i=0;i<rightMenu.length;i++){
var m=rightMenu[i];
var li=createlDiv('ck-li');
if(!isUndefined(m['underline'])){
li.addClass('ck-underline');
}
if(!isUndefined(m['link']) && !isUndefined(m['title'])){
li.append(createlA(m['title'],m['link']));
C['menu'].append(li);
}
else if(!isUndefined(m['javascript']) && !isUndefined(m['title'])){
li.append(createlJsLink(m['title'],m['javascript']));
C['menu'].append(li);
}
else if(!isUndefined(m['click']) && !isUndefined(m['title'])){
var a=createlJsLink(m['title']);
a.attr('data-click',m['click'].toString());
a.click(function(){
eval($(this).attr('data-click')+'()');
C['menu'].hide();
});
li.append(a);
C['menu'].append(li);
}
else if(!isUndefined(m['title'])){
li.htm(m['title']);
C['menu'].append(li);
}
}
$('body').append(C['menu']);
CM.oncontextmenu = function(eve) {
var e = eve || window.event;
var client = getClient(e);
if (e.button == 2) {
e.returnvalue = false;
var x = client['x'] - 2;
var y = client['y'] - 2;
C['menu'].show();
C['menu'].css({
left: x + 'px',
top: y + 'px'
});
return false;
}
return true;
};
var menuSetTimeOut=null;
var clearTime=function(){
if(menuSetTimeOut){
clearTimeout(menuSetTimeOut);
menuSetTimeOut=null;
}
};
var menuMouseOut=function(){
clearTime();
menuSetTimeOut=setTimeout(function(){
C['menu'].hide();
},200);
};
C['menu'].mouseout(menuMouseOut);
C['menu'].mouseover(clearTime);
},
/*
* aboutShow
* 功能显示关于视频
*/
aboutShow=function(){
C['about'].show();
C['menu'].hide();
},
/*
* aboutHide
* 功能显示关于视频
*/
aboutHide=function(){
C['about'].hide();
},
/*
* aboutCopy
* 功能拷贝关于视频内容
*/
aboutCopy=function(){
C['about']['textareaEle'].show();
C['about']['textareaEle'].select();
document.execCommand('Copy'); // 执行浏览器复制命令
C['about']['textareaEle'].hide();
message(language['copySucceeded'],true);
},
/*
* getBarHeight
* 功能获取控制栏的高
*/
getBarHeight=function(){
var h=C['bar'].getHeight();
if(parseFloat(C['bar']['pbox'].css('top'))<0){
h-=parseInt(C['bar']['pbox'].css('top'));
}
return h;
},
/*
* hideBar
* 功能隐藏控制栏只在播放状态下有效
*/
hideBar=function(){
if(mouseSetTime){
clearTimeout(mouseSetTime);
mouseSetTime=null;
}
mouseSetTime=setTimeout(function(){
if(!paused){
C['bar'].addClass('ck-bar-out');
eventTarget('mouseActive',false);
if(CT.full){
CM.addClass('ck-nocursor');
}
if(C['rightBar'].css('display')=='block'){
C['rightBar'].addClass('ck-right-bar-hide');
}
if(C['topBar'].css('display')=='block'){
C['topBar'].addClass('ck-top-bar-hide');
}
}
mouseSetTime=null;
},vars['barHideTime']);
},
/*
* barMouseOut
* 功能鼠标离开控制栏修改播放进度框样式
*/
barMouseOut=function(){
if(!paused){
C['bar']['pbox'].addClass('ck-bar-progress-out');
hideBar();
}
},
/*
* barMouseOver
* 功能鼠标经过控制栏修改播放进度框样式
*/
barMouseOver=function(){
if(!paused){
C['bar']['pbox'].removeClass('ck-bar-progress-out');
if(mouseSetTime){
clearTimeout(mouseSetTime);
mouseSetTime=null;
}
}
},
/*
* rightBarMouseOut
* 功能鼠标离开右侧控制栏修改播放进度框样式
*/
rightBarMouseOut=function(){
if(!paused){
hideBar();
}
},
/*
* rightBarMouseOver
* 功能鼠标经过右侧控制栏修改播放进度框样式
*/
rightBarMouseOver=function(){
if(!paused){
if(mouseSetTime){
clearTimeout(mouseSetTime);
mouseSetTime=null;
}
}
},
/*
* checkPlaybackrate
* 功能初始化或重置倍速组件内容
*/
checkPlaybackrate=function(){
var playbackrate=vars['playbackrateList'];
var pbr=vars['playbackrate'];
C['bar']['playbackrate']['bg']=createlDiv('ck-list-bg');
C['bar']['playbackrate']['bgbox'].append(C['bar']['playbackrate']['bg']);
C['bar']['playbackrate']['bg']['p']=[];
for(var i=playbackrate.length-1;i>-1;i--){
var pTemp=createlButton('ck-list-p',playbackrate[i]+language['playbackrateSuffix']);
pTemp.attr('data-i',i).attr('data-val',playbackrate[i]);
C['bar']['playbackrate']['bg']['p'].push(pTemp);
C['bar']['playbackrate']['bg'].append(pTemp);
pTemp.click(playbackrateClick);
}
C['bar']['playbackrate'].hide();
if(!isUndefined(vars['playbackrateOpen']) && vars['playbackrateOpen']){
C['bar']['playbackrate'].show();
C['bar']['playbackrate']['bgbox'].show();
var w=C['bar']['playbackrate']['bg'].getWidth(),h=C['bar']['playbackrate']['bg'].getHeight();
var bw=C['bar']['playbackrate']['button'].getWidth();
C['bar']['playbackrate']['bg'].css({'width':w+10+'px'});
w=C['bar']['playbackrate']['bg'].getWidth();
if(getBarHeight()>C['bar'].getHeight()){
h+=(getBarHeight()-C['bar'].getHeight());
}
C['bar']['playbackrate']['bgbox'].attr('style','');
C['bar']['playbackrate']['bgbox'].css({
'width':w+'px',
'height':(h+2)+'px',
'left':-(w-bw)*0.5+'px'
});
C['bar']['playbackrate']['button'].mouseover(function(){
w=C['bar']['playbackrate']['bg'].getWidth();
bw=C['bar']['playbackrate']['button'].getWidth();
C['bar']['playbackrate']['bgbox'].css({
'left':-(w-bw)*0.5+'px'
});
});
changePlaybackrateVal(pbr);
}
},
/*
* playbackrateClick
* 功能选择播速
*/
playbackrateClick=function(e){
C['bar']['playbackrate']['bgbox'].hide();
setTimeout(function(){C['bar']['playbackrate']['bgbox'].removeCss('display');},300);
message(language['switchTo']+$(this).htm());
player.playbackRate(parseFloat($(this).attr('data-val')));
},
/*
* changePlaybackrateVal
* 功能根据速度检查播速
*/
changePlaybackrateVal=function(num){
C['bar']['playbackrate']['bg'].find('button').each(function(index,ele){
var val=parseFloat(ele.attr('data-val'));
ele.removeClass('ck-list-p-focus');
if(num==val){
ele.addClass('ck-list-p-focus');
if(num!=1){
C['bar']['playbackrate']['button'].htm(ele.htm());
}
else{
C['bar']['playbackrate']['button'].htm(language['playbackrate']);
}
}
else{
ele.removeClass('ck-list-p-focus');
}
});
},
/*
* checkTrack
* 功能初始化或重置字幕组件内容
*/
checkTrack=function(){
var track=vars['track'];
var pbr=-1;
C['bar']['track']['bgbox'].htm('');
C['bar']['track']['bg']=createlDiv('ck-list-bg');
C['bar']['track']['bgbox'].append(C['bar']['track']['bg']);
C['bar']['track']['bg']['p']=[];
var pTemp=null;
for(var i=track.length-1;i>-1;i--){
pTemp=createlButton('ck-list-p',track[i]['label']);
pTemp.attr('data-i',i).attr('data-title',track[i]['label']);
C['bar']['track']['bg']['p'].push(pTemp);
C['bar']['track']['bg'].append(pTemp);
if(!isUndefined(track[i]['default']) && track[i]['default']){
pbr=i;
}
pTemp.click(trackClick);
}
//
pTemp=createlButton('ck-list-p',language['noTrack']);
pTemp.attr('data-i',-1).attr('data-title',language['noTrack']);
C['bar']['track']['bg']['p'].push(pTemp);
C['bar']['track']['bg'].append(pTemp);
pTemp.click(trackClick);
//
C['bar']['track'].hide();
C['bar']['track'].show();
C['bar']['track']['bgbox'].show();
var w=C['bar']['track']['bg'].getWidth(),h=C['bar']['track']['bg'].getHeight();
var bw=C['bar']['track']['button'].getWidth();
C['bar']['track']['bg'].css({'width':w+10+'px'});
w=C['bar']['track']['bg'].getWidth();
if(getBarHeight()>C['bar'].getHeight()){
h+=(getBarHeight()-C['bar'].getHeight());
}
C['bar']['track']['bgbox'].attr('style','');
C['bar']['track']['bgbox'].css({
'width':w+'px',
'height':(h+2)+'px',
'left':-(w-bw)*0.5+'px'
});
C['bar']['track']['button'].mouseover(function(){
w=C['bar']['track']['bg'].getWidth();
bw=C['bar']['track']['button'].getWidth();
C['bar']['track']['bgbox'].css({
'left':-(w-bw)*0.5+'px'
});
});
changeTrackVal(pbr);
},
/*
* trackClick
* 功能选择字幕
*/
trackClick=function(e){
C['bar']['track']['bgbox'].hide();
setTimeout(function(){C['bar']['track']['bgbox'].removeCss('display');},300);
message(language['switchTo']+$(this).attr('data-title'));
player.track(parseFloat($(this).attr('data-i')));
},
/*
* changeTrackVal
* 功能根据字幕检查
*/
changeTrackVal=function(num){
C['bar']['track']['bg'].find('button').each(function(index,ele){
var i=parseInt(ele.attr('data-i'));
if(num==i){
C['bar']['track']['button'].htm(ele.attr('data-title'));
if(i>-1){
CT.track=vars['track'][i];
eventTarget('track',vars['track'][i]);
}
else{
CT.track=null;
eventTarget('track',null);
}
ele.addClass('ck-list-p-focus');
}
else{
ele.removeClass('ck-list-p-focus');
}
});
},
/*
* checkDefinition
* 功能初始化或重置清晰度组件内容
*/
checkDefinition=function(){
var pi=-1;
var videoUrl=video['currentSrc'];
if(!isUndefined(C['bar']['definition']['bg'])){
C['bar']['definition']['bgbox'].htm('');
C['bar']['definition']['bgbox'].attr('style','');
C['bar']['definition']['button'].htm(language['definition']);
}
if(valType(vars['video'])=='array'){
var arr=vars['video'];
C['bar']['definition']['bg']=createlDiv('ck-list-bg');
C['bar']['definition']['bgbox'].append(C['bar']['definition']['bg']);
C['bar']['definition']['bg']['p']=[];
for(var i=arr.length-1;i>-1;i--){
var pTemp=createlButton('ck-list-p',arr[i][2]);
pTemp.attr('data-i',i).attr('data-video',arr[i][0]).attr('data-type',arr[i][1]).attr('data-title',arr[i][2]);
C['bar']['definition']['bg']['p'].push(pTemp);
C['bar']['definition']['bg'].append(pTemp);
if(videoUrl && videoUrl.indexOf(arr[i][0])>-1){
pi=i;
}
pTemp.click(definitionClick);
}
C['bar']['definition'].show();
C['bar']['definition']['bgbox'].show();
var w=C['bar']['definition']['bg'].getWidth(),h=C['bar']['definition']['bg'].getHeight();
var bw=C['bar']['definition']['button'].getWidth();
C['bar']['definition']['bg'].css({'width':w+10+'px'});
w=C['bar']['definition']['bg'].getWidth();
if(getBarHeight()>C['bar'].getHeight()){
h+=(getBarHeight()-C['bar'].getHeight());
}
C['bar']['definition']['bgbox'].attr('style','');
C['bar']['definition']['bgbox'].css({
'width':w+'px',
'height':(h+2)+'px',
'left':-(w-bw)*0.5+'px'
});
C['bar']['definition']['button'].mouseover(function(){
w=C['bar']['definition']['bg'].getWidth();
bw=C['bar']['definition']['button'].getWidth();
C['bar']['definition']['bgbox'].css({
'left':-(w-bw)*0.5+'px'
});
});
}
if(pi>-1){
C['bar']['definition']['bg'].find('button').each(function(index,ele){
var i=parseInt(ele.attr('data-i'));
if(pi==i){
ele.addClass('ck-list-p-focus');
}
else{
ele.removeClass('ck-list-p-focus');
}
});
}
},
/*
* definitionClick
* 功能选择清晰度
*/
definitionClick=function(e){
C['bar']['definition']['bgbox'].hide();
setTimeout(function(){
C['bar']['definition']['bgbox'].removeCss('display');
},300);
changeDefinition(parseInt($(this).attr('data-i')));
},
/*
* changeDefinition
* 功能检查清晰度
*/
changeDefinition=function(num){
C['bar']['definition']['bg'].find('button').each(function(index,ele){
var i=parseInt(ele.attr('data-i'));
if(num==i){
if(!isUndefined(video.textTracks) && video.textTracks.length>0){
for(var y=video.find('track').length-1;y>-1;y--){
video.find('track').eq(y).remove();
}
}
seekTime=player.time();
video.attr('autoplay','autoplay');
changeVideo(ele.attr('data-video'));
message(language['switchTo']+ele.htm());
C['bar']['definition']['button'].htm(ele.htm());
ele.addClass('ck-list-p-focus');
eventTarget('definition',{id:i,video:ele.attr('data-video'),title:ele.attr('data-title')});
}
else{
ele.removeClass('ck-list-p-focus');
}
});
},
/*
* deletePrompt
* 功能删除关键点
*/
deletePrompt=function(){
var i=0;
if(!isUndefined(C['prompt']) && valType(C['prompt'])=='array'){
for(i=C['prompt'].length;i>-1;i--){
if(!isUndefined(C['prompt'][i])){
C['prompt'][i].remove();
}
}
C['prompt']=null;
}
C['prompt']=[];
},
/*
* changePrompt
* 功能构建关键点
*/
changePrompt=function(){
deletePrompt();
for(var i=0;i<vars['prompt'].length;i++){
var obj=vars['prompt'][i];
if(!isUndefined(obj) && 'words' in obj && 'time' in obj && !isUndefined(obj['time']) && !isUndefined(obj['words']) && valType(obj['time'])=='number'){
var ele=createlDiv('ck-bar-progress-prompt');
ele.attr('data-words',obj['words']).attr('data-time',obj['time']);
C['bar']['pbox']['bg'].append(ele);
var bf=(ele.getWidth()*0.5/C['bar']['pbox']['bg'].getWidth())*50;
var left=obj['time']/duration*100-bf;
if(left<0) left=0;
if(left>100) left=100;
ele.css({'left':left+'%'});
ele.mouseover(function(){
if(this.attr('data-words')){
showPromptWords(this);
}
});
ele.mouseout(function(){
if(this.attr('data-words')){
showPromptWords();
}
});
C['prompt'].push(ele);
}
}
},
/*
* showPromptWords
* 功能显示关键点提示
*/
showPromptWords=function(ele){
if(isUndefined(C['promptWords'])){
C['promptWords']=createlDiv('ck-prompt-words');
CM.append(C['promptWords']);
C['promptWords']['content']=createlDiv('ck-prompt-content');
C['promptWords'].append(C['promptWords']['content']);
}
if(isUndefined(ele)){
C['promptWords']['content'].htm('');
C['promptWords'].hide();
return;
}
C['promptWords']['content'].htm(ele.attr('data-words'));
C['promptWords'].show();
var pW=C['promptWords'].getWidth(),pH=C['promptWords'].getHeight();
var bg=C['bar']['pbox']['bg'];
var time=parseFloat(ele.attr('data-time'));
var top=CK.getHeight()-getBarHeight();
var left=ele.offset()['left']-CK.offset()['left']+ele.getWidth()*.5-pW*.5;
if(!isUndefined(C['preview'])){
top=CK.getHeight()-parseFloat((getBarHeight()+C['preview']['smallHight']+parseInt(C['preview'].css('margin-bottom'))));
}
else{
top=CK.getHeight()-parseFloat((getBarHeight()+C['tip']['minHeight']+parseInt(C['tip'].css('margin-bottom'))));
top-=(getBarHeight()-C['bar'].getHeight());
}
top-=parseFloat(C['promptWords'].css('margin-bottom'));
top-=pH;
left-=parseFloat(C['promptWords'].css('margin-right'));
if(left<0)left=0;
if(left>CK.getWidth()-pW)left=CK.getWidth()-pW;
C['promptWords'].css({
'top':top+'px',
'left':left+'px'
});
},
/*
* changePreview
* 功能加载或重置预览图片
*/
changePreview=function(preview){
if(!isUndefined(C['preview'])){
C['preview'].remove();
C['preview']=null;
}
if(!isUndefined(preview)){
C['preview']=createlDiv('ck-preview');
CM.append(C['preview']);
if(isUndefined(vars['preview']['type'])){
vars['preview']['type']=0;
}
if(vars['preview']['type']==1){
C['preview']['bg']=createlDiv('ck-preview-bg');
C['preview'].append(C['preview']['bg']);
}
var files=[];
var loadImg=function(bigW,bigH,smallW,smallH){
if(vars['preview']['type']==1){
C['preview']['bg']['img']=[];
for(var i=0;i<files.length;i++){
for(var y=0;y<bigH/smallH;y++){
var img=createlDiv('ck-preview-img');
img.attr('data-img',files[i]).attr('data-i',y);
img.css({
'width':bigW+'px',
'height':smallH+'px',
'background-position':'left '+(-(y*smallH))+'px'
});
C['preview']['bg'].append(img);
C['preview']['bg']['img'].push(img);
}
}
C['preview']['bg'].css({
'width':bigW*(bigH/smallH)*(files.length+1)+'px',
'height':smallH+'px'
});
}
C['preview']['bigWidth']=bigW;
C['preview']['bigHight']=bigH;
C['preview']['smallWidth']=smallW;
C['preview']['smallHight']=smallH;
if(vars['preview']['type']==1){
C['preview']['frame']=createlDiv('ck-preview-frame');
C['preview'].append(C['preview']['frame']);
C['preview']['frame'].css({
'width':smallW+'px',
'height':(smallH-parseFloat(C['preview']['frame'].css('border-width'))*2)+'px',
});
}
};
if(valType(vars['preview'])=='object'){
if(valType(vars['preview']['file'])=='array'){
files=vars['preview']['file'];
var thumbnail=[10,10];
if(valType(vars['preview']['thumbnail'])=='array' && vars['preview']['thumbnail'].length>1){
if(valType(vars['preview']['thumbnail'][0])=='number'){
thumbnail[0]=vars['preview']['thumbnail'][0];
}
if(valType(vars['preview']['thumbnail'][1])=='number'){
thumbnail[1]=vars['preview']['thumbnail'][1];
}
vars['preview']['thumbnail']=thumbnail;
}
if(files[0]){
var img = createlImg(files[0],'ck-preview-load-img').addListener('load',function(){
loadImg(this.getWidth(),this.getHeight(),this.getWidth()/thumbnail[0],this.getHeight()/thumbnail[1]);
this.remove();
});
CM.append(img);
}
}
else{
C['preview'].removeChild();
C['preview']=null;
}
}
else{
C['preview'].removeChild();
C['preview']=null;
}
}
},
/*
* showPreview
* 功能显示预览图
*/
showPreview=function(time){
if(hidePreviewSetTime){
clearTimeout(hidePreviewSetTime);
hidePreviewSetTime=null;
}
if(time<0){
if(!isUndefined(C['preview'])){
hidePreviewSetTime=setTimeout(function(){
C['preview'].hide();
hidePreviewSetTime=null;
},200);
return;
}
}
if(!isUndefined(C['preview']) && !isUndefined(vars['preview']['thumbnail']) && duration>0){
if(isUndefined(vars['preview']['type'])){
vars['preview']['type']=0;
}
var scale=2,thumbnail=vars['preview']['thumbnail'];
if(!isUndefined(vars['preview']['scale'])){
scale=vars['preview']['scale'];
}
var divI=0,imgI=0;
var left=0,frameLeft=0;
var pW=0;
var smallW=C['preview']['smallWidth'],smallH=C['preview']['smallHight'];
var bgXw=time*C['bar']['pbox']['bg'].getWidth()/duration+(C['bar']['pbox']['bg'].offset()['left']-CK.offset()['left']);
if(C['preview'].css('display')=='none'){
C['preview'].show();
}
C['preview'].css({
'height':smallH+'px',
});
if(vars['preview']['type']==1){
divI=parseInt(time/(scale*thumbnail[0]));
imgI=parseInt(time/scale);
var minI=divI-5,maxI=divI+5;
if(minI<0) minI=0;
if(maxI>C['preview']['bg']['img'].length-1){
maxI=C['preview']['bg']['img'].length-1;
}
for(var i=minI;i<maxI;i++){
if(C['preview']['bg']['img'][i].attr('data-img')){
var bgPosition=C['preview']['bg']['img'][i].css('background-position');
C['preview']['bg']['img'][i].css({'background':'url('+C['preview']['bg']['img'][i].attr('data-img')+') no-repeat'});
C['preview']['bg']['img'][i].attr('data-img','');
C['preview']['bg']['img'][i].css('background-position',bgPosition);
}
}
pW=C['preview']['frame'].getWidth();
frameLeft=bgXw-pW*.5;
left=-(imgI*smallW+smallW*.5)+bgXw;
if(frameLeft<0){
frameLeft=0;
bgXw=(pW-smallW)*0.5;
left=-(imgI*smallW)+bgXw;
}
if(frameLeft>C['preview'].getWidth()-C['preview']['frame'].getWidth()){
var xz=frameLeft-(C['preview'].getWidth()-C['preview']['frame'].getWidth());
frameLeft=C['preview'].getWidth()-C['preview']['frame'].getWidth();
left-=xz;
}
C['preview']['bg'].css({'left':left+'px'});
C['preview']['frame'].css({'left':frameLeft+'px'});
}
else{
var temp=(time/scale)/(thumbnail[0]*thumbnail[1]);
imgI=parseInt(temp);//计算显示的图片编号
var smallI=parseInt((temp-imgI)*100);
var rows=parseInt(smallI/thumbnail[0]);
var column=smallI%thumbnail[0];
var files=vars['preview']['file'];
left=bgXw-smallW*.5;
if(left<0){
left=0;
}
if(left>CK.getWidth()-smallW){
left=CK.getWidth()-smallW;
}
C['preview'].css({
'width':C['preview']['smallWidth']+'px',
'background':'url('+files[imgI]+') no-repeat',
'background-position':'-'+column*smallW+'px -'+rows*smallH+'px',
'left':left+'px'
});
}
}
},
/*
* showError
* 功能显示错误信息
*/
showError=function(){
C['loading'].hide();
if(vars['controls'] || !vars['errorShow']){
return;
}
if(isUndefined(C['error'])){
C['error']=createlDiv('ck-error');
CM.append(C['error']);
}
var msg=CT.error['message'];
if(!msg) msg=language['error']['noMessage'];
var html=msg+'(code:'+CT.error['code']+')';
C['error'].htm(html);
C['error'].show();
},
/*
* showWindowsError
* 功能显示错误信息
*/
showWindowsError=function(error){
var ele=createlDiv('ckplayer-error',error);
$('body').append(ele);
},
/*
* showNextEpisode
* 功能鼠标经过下一集按钮的动作
*/
showNextEpisode=function(){
if(isUndefined(vars['next'])) return;
if(valType(vars['next'])=='object'){
if('content' in vars['next']){
C['next']=player.layer(vars['next']);
return;
}
if('title' in vars['next']){
tip(C['bar']['nextEpisode'],vars['next']['title']);
return;
}
}
tip(C['bar']['nextEpisode'],language['next']);
},
/*
* nextClick
* 功能点击下一集按钮的动作
*/
nextClick=function(){
if(valType(vars['next'])=='object'){
if('click' in vars['next']){
if(valType(vars['next']['click'])=='function'){
vars['next']['click']();
}
else if(valType(vars['next']['click'])=='string'){
eval(vars['next']['click']+'()');
}
}
if('link' in vars['next']){
window.location.href=vars['next']['link'];
}
eventTarget('next');
}
},
/*
* showEnded
* 功能播放结束后的显示内容
*/
showEnded=function() {
if(!CT.loop && !isUndefined(vars['ended'])){
closePauseAd();
C['ended']=player.layer(vars['ended']);
if(C['ended']){
C['centerPlay'].hide();
}
return;
}
},
/*
* windowScroll
* 功能监听页面滚动
*/
windowScroll=function() {
if(!CT.smallWindows) return;
if(CT.webFull || CT.theatre || CT.full){
exitSmallWindows();
return;
}
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if(scrollTop>CT.offset()['top']+CT.getHeight()){
if(!CK.hasClass('ckplayer-ckplayer-smallwindow')){
CK.addClass('ckplayer-ckplayer-smallwindow');
eventTarget('smallWindows',true);
smallWindowsState=true;
if(vars['smallWindowsDrag']){
drag(true);
}
allBarHide();
checkVideoRotate();
}
}
else{
exitSmallWindows();
}
},
/*
* exitSmallWindows
* 退出小窗口模式
*/
exitSmallWindows=function(){
if(CK.hasClass('ckplayer-ckplayer-smallwindow')){
CK.removeClass('ckplayer-ckplayer-smallwindow');
if(vars['smallWindowsDrag']){
drag();
}
eventTarget('smallWindows',false);
smallWindowsState=false;
allBarShow();
checkVideoRotate();
}
},
/*
* drag
* 功能使节点可拖动
* state是否开启可拖动默认=false关闭状态
*/
drag=function(state) {
var doc=$(document);
var posX = 0,posY = 0,
posXRecord = 0,posYRecord = 0;
var open=false;
if(!isUndefined(state)){
open=state;
}
var mouseDown = function(e) {
e.preventDefault && e.preventDefault();
e = e || window.event;
var client = getClient(e);
posXRecord = client['x'];
posYRecord = client['y'];
doc.mousemove(docMouseMove);
doc.mouseup(docMouseUp);
CK.css({
'cursor':'move'
});
};
var docMouseMove = function(e) {
e = e || window.event;
var client = getClient(e);
var eleOffset = CK.offset();
posY = client['y']-posYRecord;
posX = client['x']-posXRecord;
posXRecord = client['x'];
posYRecord = client['y'];
var left=eleOffset['left']+posX;
var top=eleOffset['top']+posY;
CK.css({
'left':left+'px',
'top':top+'px'
});
if(CK.css('position')!='fixed'){
CK.css({
'position':'fixed'
});
}
isDrag=true;
};
var docMouseUp = function() {
doc.removeListener('mousemove', docMouseMove);
doc.removeListener('mouseup', docMouseUp);
CK.css({
'cursor':'default'
});
};
if(open){
CK.mousedown(mouseDown);
}
else{
CK.unbind('mousedown');
}
},
/*
* checkVideoRotate
* 检查播放器尺寸
*/
checkVideoRotate=function(){
var ckW=CK.getWidth()*nowZoom*0.01,ckH=CK.getHeight()*nowZoom*0.01;
var vW=CV.getWidth(),vH=CV.getHeight();
CV.css({
'transform':'rotate('+nowRotate+'deg)',
'-ms-transform':'rotate('+nowRotate+'deg)',
'-moz-transform':'rotate('+nowRotate+'deg)',
'-webkit-transform':'rotate('+nowRotate+'deg)',
'-o-transform':'rotate('+nowRotate+'deg)',
'width':nowZoom+'%',
'height':nowZoom+'%'
});
if(nowRotate!=0 && nowRotate!=180){
if(vH>ckW && vW>ckH){
if(vH / ckW > vW / ckH) {
CV.css({
'height':nowZoom+'%',
'width':ckH+'px'
});
}
else {
CV.css({
'width':nowZoom+'%',
'height':ckW+'px'
});
}
return;
}
if(vH<ckW && vW<ckH){
if(ckW>ckH){
CV.css({
'height':nowZoom+'%',
'width':ckH+'px'
});
}
else{
if(vH / vW >= ckW / ckH) {
CV.css({
'width':nowZoom+'%',
'height':ckW+'px'
});
}
else {
CV.css({
'height':nowZoom+'%',
'width':ckH+'px'
});
}
}
return;
}
if(vH>=ckW && vW<=ckH){
CV.css({
'width':nowZoom+'%',
'height':ckW+'px'
});
return;
}
if(vW>=ckH && vH<ckW){
CV.css({
'height':nowZoom+'%',
'width':ckH+'px'
});
}
}
},
/*
* allBarShow
* 功能控制栏显示
*/
allBarShow=function(){
if(barShow){
C['bar'].show();
C['topBar'].show();
}
if(rightBarShow){
C['rightBar'].show();
}
C['tempTime'].hide();
if(!isUndefined(C['logo'])){
C['logo'].show();
}
},
/*
* allBarHide
* 功能控制栏隐藏
*/
allBarHide=function(tempTime){
if(isUndefined(tempTime)){
tempTime=true;
}
C['bar'].hide();
C['topBar'].hide();
C['rightBar'].hide();
if(tempTime){
C['tempTime'].show();
}
if(!isUndefined(C['logo'])){
C['logo'].hide();
}
},
/*
* message
* 功能显示提示
*/
message=function(str,right){
C['message'].htm('');
var msgHide=function(){
C['message'].removeClass('ck-message-right').removeClass('ck-animate-bouncein').removeClass('ck-animate');
C['message'].hide();
};
if(str){
C['message'].htm(str);
C['message'].show();
if(!C['message'].hasClass('ck-animate')){
C['message'].addClass('ck-animate ck-animate-bouncein');
}
if(!isUndefined(right) && right){
if(!C['message'].hasClass('ck-message-right')){
C['message'].addClass('ck-message-right');
}
}
if(msgSetTime){
clearTimeout(msgSetTime);
msgSetTime=null;
}
msgSetTime=setTimeout(function(){
msgHide();
msgSetTime=null;
},1500);
}
else{
msgHide();
}
},
/*
* tip
* 功能显示Tip
* @ele需要显示提示的对象@str提示文字@cl水平修正距离@align对齐方式只有两种一种默认对齐箭头在提示文字下方一种是左对齐箭头在提示文字右边
*/
tip=function(ele,str,cl,align){
C['tip']['content'].htm('');
if(str){
C['tip']['content'].htm(str);
C['tip'].show();
if(!C['tip'].hasClass('ck-animate')){
C['tip'].addClass('ck-animate ck-animate-bouncein');
}
if(isUndefined(align)){
align='auto'
}
if(align=='left'){
C['tip']['content'].removeClass('ck-content-float-auto').addClass('ck-content-float-left');
C['tip']['triangle'].removeClass('ck-triangle-auto').addClass('ck-triangle-left');
}
else{
C['tip']['content'].removeClass('ck-content-float-left').addClass('ck-content-float-auto');
C['tip']['triangle'].removeClass('ck-triangle-left').addClass('ck-triangle-auto');
}
tipResize(ele,cl,align);
if(isUndefined(closeTipFun)){
closeTipFun=function(){
if(tipSetTime){
clearTimeout(tipSetTime);
tipSetTime=null;
}
};
closeTipMouseOut=function(ele){
closeTipFun();
tipSetTime=setTimeout(function(){
tip();
tipSetTime=null;
},100);
if(ele){
ele.removeListener('mouseout',closeTipMouseOut);
}
};
}
closeTipFun();
ele.mouseout(function(){closeTipMouseOut(ele)});
}
else{
C['tip'].hide();
C['tip'].removeClass('ck-animate');
C['tip'].removeClass('ck-animate-bouncein');
}
},
/*
* tipResize
* 功能设置tip坐标
*/
tipResize=function(ele,cl,align){
var offset=ele.offset();
var ckOffset=CK.offset();
var w=C['tip'].getWidth(),h=C['tip'].getHeight();
var ew=ele.getWidth();
var left=0,top=offset['top']-ckOffset['top']-h;
if(getBarHeight()>C['bar'].getHeight()){
top-=(getBarHeight()-C['bar'].getHeight());
}
if(w>ew){
left=offset['left']-ckOffset['left']-(w-ew)*.5;
}
else{
left=offset['left']-ckOffset['left']+(ew-w)*.5;
}
if(align=='left'){
left=offset['left']-ckOffset['left']-w;
top=offset['top']-ckOffset['top'];
}
if(!isUndefined(cl)){
left=cl['x']-ckOffset['left']-w*.5;
}
if(left<0){
left=0;
}
if(top<0){
top=0;
}
if(left>CM.getWidth()-w){
left=CM.getWidth()-w;
}
if(top>CM.getHeight()-h){
top=CM.getHeight()-h;
}
C['tip'].css({
'left':left+'px',
'top':top-parseInt(C['tip'].css('margin-bottom'))+'px'
});
},
/*
* progressDragX
* 功能制作进度调节框事件
*/
progressDragX=function(){
var bg=C['bar']['pbox']['bg'],
play=C['bar']['pbox']['play'],
slider=C['bar']['pbox']['slider'],
mouseLine=C['bar']['pbox']['mouseLine'];
slider.unbind();
bg.unbind();
var pos = 0,
posRecord = 0;
var doc=$(document);
var sliderDownTime=0;
var sliderMouseDown = function(e) {
e.preventDefault && e.preventDefault();
if(!vars['timeScheduleAdjust']){//禁止拖动
return;
}
e = e || window.event;
var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
pSliderMouseDown=true;
posRecord = client['x'];
//供比较
var left = eleOffset['left']-bgOffset['left'];
sliderDownTime=left*duration/(bg.getWidth()-slider.getWidth());
slider.removeListener('mousedown', sliderMouseDown);
slider.removeListener('touchstart', sliderMouseDown);
doc.mousemove(docMouseMove);
doc.mouseup(docMouseUp);
slider.touchmove(docMouseMove);
slider.touchend(docMouseUp);
noScrolling(true);
};
var docMouseMove = function(e) {
e = e || window.event;
var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
pSliderMouseDown=true;
pos = posRecord - client['x'];
posRecord = client['x'];
var left = eleOffset['left'] - pos-bgOffset['left'];
if(left<0){
left=0;
}
if(left>bg.getWidth()-slider.getWidth()){
left=bg.getWidth()-slider.getWidth();
}
C['bar']['pbox'].addClass('ck-bar-progress-slider-move');
//预览时间
var time='';
if(!vars['live']){
time=left*duration/(bg.getWidth()-slider.getWidth());
switch(vars['timeScheduleAdjust']){
case 2://只能前进(向右拖动
if(time<sliderDownTime){
left=-1000;
message(language['timeScheduleAdjust']['prohibitBackOff']);
}
break;
case 3://是只能后退
if(time>sliderDownTime){
left=-1000;
message(language['timeScheduleAdjust']['prohibitForward']);
return;
}
break;
case 4://只能前进但能回到第一次拖动时的位置
if(time<firstSeekTime){
left=-1000;
player.seek(firstSeekTime);
message(language['timeScheduleAdjust']['prohibitLookBack']);
return;
}
break;
case 5://看过的地方可以随意拖动
if(time>maxSeeTime){
left=-1000;
player.seek(maxSeeTime);
message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
return;
}
break;
}
time=formatSeconds(time);
}
else{
time=formatLiveTime(left*getLiveTime()/(bg.getWidth()-slider.getWidth()));
}
tip(slider,time);
if(left>=0){
slider.css({
'left': left + 'px'
});
play.css({
'width': left+ slider.getWidth()*.5+ 'px'
});
}
else{
pSliderMouseDown=false;
}
};
var docMouseUp = function() {
noScrolling();
doc.removeListener('mousemove', docMouseMove);
doc.removeListener('mouseup', docMouseUp);
slider.removeListener('touchmove', docMouseMove);
slider.removeListener('touchend', docMouseUp);
slider.mousedown(sliderMouseDown);
slider.touchstart(sliderMouseDown);
if(!vars['live']){
var time=play.getWidth()*duration/(bg.getWidth()-slider.getWidth()*.5);
if(time>duration){
time=duration;
}
seekTime=0;
player.seek(time);
}
else{
var playbackTime=parseInt(vars['live']+play.getWidth()*getLiveTime()/(bg.getWidth()-slider.getWidth()*.5));
eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
}
C['bar']['pbox'].removeClass('ck-bar-progress-slider-move');
if(isMouseLeave){
tip();
}
};
var isMouseLeave=true;//默认鼠标离开了进度按钮上
var sliderMouseOver=function(){
var time='';
if(!vars['live']){
time=formatSeconds(parseInt(slider.css('left'))*duration/(bg.getWidth()-slider.getWidth()));
}
else{
time=language['live'];
}
isMouseLeave=false;
tip(slider,time);
};
var sliderMouseLeave=function(){
isMouseLeave=true;
};
slider.mousedown(sliderMouseDown);
slider.mouseover(sliderMouseOver);
slider.mouseleave(sliderMouseLeave);
slider.touchstart(sliderMouseDown);
var bgMouseDown=function(e){
e = e || window.event;
var client = getClient(e);
var bgOffset=bg.offset();
var w=client['x']-bgOffset['left'];
if(CT.full){
w+=CK.offset()['left'];
}
if(!vars['live']){
var time=duration*w/bg.getWidth();
switch(vars['timeScheduleAdjust']){
case 0://禁止拖动
message(language['timeScheduleAdjust']['prohibit']);
return;
break;
case 2://只能前进(向右拖动
if(time<oldTime){
message(language['timeScheduleAdjust']['prohibitBackOff']);
return;
}
break;
case 3://是只能后退
if(time>oldTime){
message(language['timeScheduleAdjust']['prohibitForward']);
return;
}
break;
case 4://只能前进但能回到第一次拖动时的位置
if(time<firstSeekTime){
message(language['timeScheduleAdjust']['prohibitLookBack']);
return;
}
break;
case 5://看过的地方可以随意拖动
if(time>maxSeeTime){
message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
return;
}
break;
}
seekTime=0;
player.seek(time);
}
else{
var playbackTime=parseInt(vars['live']+getLiveTime()*w/bg.getWidth());
eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
}
if(w>bg.getWidth()-slider.getWidth()*.5){
w=bg.getWidth()-slider.getWidth()*.5
}
if(w<slider.getWidth()*.5){
w=slider.getWidth()*.5;
}
pSliderMouseDown=true;
play.css({
'width': w+ 'px'
});
slider.css({
'left': w-slider.getWidth()*.5 + 'px'
});
};
var moveTimer=null;
var bgMouseMove=function(e){
e = e || window.event;
var client = getClient(e);
var bgOffset=bg.offset();
var w=client['x']-bgOffset['left'];
clearTime();
if(CT.full){
w+=CK.offset()['left'];
}
var time=0;
if(!vars['live']){
time=duration*w/bg.getWidth();
showPreview(time);
time=formatSeconds(time);
}
else{
time=formatLiveTime(getLiveTime()*w/bg.getWidth());
}
tip(bg,time,client);
mouseLine.css({'left':w-(C['bar']['pbox']['mouseLine'].getWidth()*.5)+'px'});
};
var moveTimer=null;
var clearTime=function(){
if(moveTimer){
clearTimeout(moveTimer);
moveTimer=null;
}
closeTipFun();
};
var bgMouseOut=function(e){
clearTime();
moveTimer=setTimeout(function(){
showPreview(-1);
},30);
};
bg.mousedown(bgMouseDown);
bg.mousemove(bgMouseMove);
bg.mouseout(bgMouseOut);
mouseLine.mouseover(clearTime);
},
/*
* volumeDragY
* 功能制作音量调节框事件
*/
volumeDragY=function() {
var box=C['bar']['vbox']['volume']['box'],
bg=C['bar']['vbox']['volume']['bg'],
pp=C['bar']['vbox']['volume']['pp'],
slider=C['bar']['vbox']['volume']['slider'],
doc=$(document);
var pos = 0,
posRecord = 0;
var sliderMouseDown = function(e) {
e.preventDefault && e.preventDefault();
noScrolling(true);
e = e || window.event;
var client = getClient(e);
posRecord = client['y'];
slider.removeListener('mousedown', sliderMouseDown);
slider.removeListener('touchstart', sliderMouseDown);
C['bar']['vbox']['mouseDown']=true;
doc.mousemove(docMouseMove);
doc.mouseup(docMouseUp);
slider.touchmove(docMouseMove);
slider.touchend(docMouseUp);
};
var docMouseMove = function(e) {
e = e || window.event;
var client = getClient(e);
var eleOffset = slider.offset();
var boxOffset=box.offset();
var bgOffset=bg.offset();
pos = client['y']-posRecord;
posRecord = client['y'];
var sliderTop=eleOffset['top']-boxOffset['top']+pos;
var minTop=bgOffset['top']-boxOffset['top'],maxTop=bgOffset['top']+bg.getHeight()-boxOffset['top']-slider.getHeight();
if(sliderTop<minTop){
sliderTop=minTop;
}
if(sliderTop>maxTop){
sliderTop=maxTop;
}
slider.css({
'top':sliderTop+'px'
});
var ppMarginTop=sliderTop-minTop+slider.getHeight()*0.5;
pp.css({
'margin-top':ppMarginTop+'px'
});
var vol=(bg.getHeight()-ppMarginTop-slider.getHeight()*0.5)/(bg.getHeight()-slider.getHeight());
player.volume(vol);
};
var docMouseUp = function() {
noScrolling();
doc.removeListener('mousemove', docMouseMove);
doc.removeListener('mouseup', docMouseUp);
slider.removeListener('touchmove', docMouseMove);
slider.removeListener('touchend', docMouseUp);
slider.mousedown(sliderMouseDown);
slider.touchstart(sliderMouseDown);
C['bar']['vbox']['mouseDown']=false;
};
slider.mousedown(sliderMouseDown);
slider.touchstart(sliderMouseDown);
var bgMouseDown=function(e){
e = e || window.event;
var client = getClient(e);
var bgOffset=bg.offset();
var h=client['y']-bgOffset['top'];
var max=bg.getHeight();
var vol=1-h/max;
player.volume(vol);
};
bg.mousedown(bgMouseDown);
},
/*
* changeProgress
* 功能根据时间调节播放进度
*/
changeProgress=function(time){
if((valType(vars['live'])=='boolean' && vars['live'])){
return;
}
if(!pSliderMouseDown){
var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
var playW=(time/duration)*100;
if(valType(vars['live'])=='number'){
playW='100';
}
C['bar']['pbox']['play'].css({'width':playW+'%'});
var sliderW=(slider.getWidth()/bg.getWidth())*100;
var sliderLeft=playW-sliderW*.5;
if(sliderLeft<0){
sliderLeft=0;
}
if(sliderLeft>100-sliderW){
sliderLeft=100-sliderW;
}
C['bar']['pbox']['slider'].css({'left':sliderLeft+'%'});
checkProgressSlider();
}
},
/*
* checkProgressSlider
* 功能检查设置播放进度条位置
*/
checkProgressSlider=function(){
var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
var st=0;
if(C['bar']['pbox'].css('transition-duration')){
st=parseFloat(C['bar']['pbox'].css('transition-duration'))*1000+20;
}
var checkThis=function(){
var sliderLeft=parseInt(C['bar']['pbox']['slider'].css('left'));
if(sliderLeft<0){
sliderLeft=0;
C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
}
if(sliderLeft>bg.getWidth()-slider.getWidth()){
sliderLeft=bg.getWidth()-slider.getWidth();
C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
}
};
setTimeout(checkThis,st);
},
/*
* changeTopTime
* 功能修改顶部右侧时间
*/
changeTopTime=function(){
C['topBar']['timeEle'].htm(date('H:i:s'));
setTimeout(changeTopTime,1000);
},
/*
* changeVolumeSlider
* 功能根据音量改变滑块位置
*/
changeVolumeSlider=function(vol){
if(!isUndefined(C['bar']['vbox'])){
var box=C['bar']['vbox']['volume']['box'],
bg=C['bar']['vbox']['volume']['bg'],
pp=C['bar']['vbox']['volume']['pp'],
slider=C['bar']['vbox']['volume']['slider'];
C['bar']['vbox']['volume']['txt'].htm(parseInt(vol*100));
var bgH=bg.getHeight();
if(bgH){
var ppMarginTop=bgH-vol*bgH;
pp.css({
'margin-top':ppMarginTop+'px'
});
var sliderTop=bg.offset()['top']-box.offset()['top']+ppMarginTop-slider.getHeight()*0.5;
slider.css({
'top':sliderTop+'px'
});
}
}
},
/*
* changeLoad
* 功能获取视频已加载部分并修改加载进度栏
*/
changeLoad=function(){
if(video){
var len = video.buffered.length;
if(len>0){
var bufferEnd = video.buffered.end(len-1);
if(loadTime<bufferEnd){
loadTime=bufferEnd;
}
replaceInformation('loadTime',parseInt(loadTime*100)*0.01);
C['bar']['pbox']['load'].css('width',(loadTime/duration)*100+'%');
}
}
},
/*
* changeMuted
* 功能修改静音和取消静音时按钮切换事件
*/
changeMuted=function(b){
if(b){
C['bar']['vbox']['muted'].hide();
C['bar']['vbox']['exitMuted'].show();
C['ad']['bottom']['mutedAndExit']['muted'].hide();
C['ad']['bottom']['mutedAndExit']['exitMuted'].show();
message(language['muted']);
}
else{
C['bar']['vbox']['muted'].show();
C['bar']['vbox']['exitMuted'].hide();
C['ad']['bottom']['mutedAndExit']['muted'].show();
C['ad']['bottom']['mutedAndExit']['exitMuted'].hide()
}
},
/*
* replaceInformation
* 功能替换关于里的内容
*/
replaceInformation=function(o , n){
if(isUndefined(C['about']['sourceData']) && !isUndefined(C['about'].find('ul'))){
C['about']['sourceData']=C['about'].find('ul').eq(0).htm();
C['about']['objData']={};
var reg=/{(.*?)}/g;
var res = C['about']['sourceData'].match(reg);
while( res = reg.exec(C['about']['sourceData'])){
C['about']['objData'][res[1]]='0';
}
}
if(!isUndefined(C['about'].find('ul'))){
var reg=null;
var htm=C['about']['sourceData'];
var temp=C['about']['textareaText'];
if(C['about']['objData']){
for(var k in C['about']['objData']){
if(o!=k){
reg = new RegExp('{'+k+'}' , 'g');
var val=C['about']['objData'][k];
if(isUndefined(val)){
val='0';
}
htm=htm.replace(reg , val);
temp=temp.replace(reg , val);
}
}
}
reg = new RegExp('{'+o+'}' , 'g');
htm=htm.replace(reg , n || '');
temp=temp.replace(reg , n || '');
C['about']['textareaEle'].htm(temp);
C['about']['objData'][o]=n;
return C['about'].find('ul').eq(0).htm(htm);
}
},
/*
* calculationFps
* 功能获取fps
*/
calculationFps=function() {
var requestAnimationFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000 / 60);
};
var e, pe, pid, fps, last, offset;
fps = 0;
last = Date.now();
var step = function() {
offset = Date.now() - last;
fps += 1;
if(offset >= 1000) {
last += offset;
appendFps(fps);
fps = 0;
}
requestAnimationFrame(step);
};
var appendFps = function(fps) {
if(fps!=CT.fps){
CT.fps=fps;
replaceInformation('fps',fps);
eventTarget('fps',fps);
}
};
if(isUndefined(CT.fps)){
CT.fps=0;
}
step();
},
/*
* getElement
* 功能获取一个外部节点
*/
getElement=function(content){
var ele=$(content);
if(isUndefined(ele)) return;
if(valType(ele)=='htmlarray'){
ele=ele[0];
}
if(isUndefined(ele.captureParentNode)){
ele.captureParentNode = ele.parentNode;
ele.prevElement=ele.prev();
ele.nextElement=ele.next();
}
return ele;
},
/*
* $
* 功能根据ID或className或节点节点名称获取对象
*/
$=function(obj, eL) {
var parent = null;
if (document) {
parent = document;
}
if (!isUndefined(eL)) {
parent = eL;
}
var res = [];
if (obj) {
if (valType(obj) == 'htmlobject' || valType(obj)=='object') {
res = obj;
if (!isUndefined(res.ckplayer)) {
return res;
}
}
else if (valType(obj) == 'string' && obj!='') {
switch (obj.substr(0, 1)) {
case '.':
obj = obj.substr(1, obj.length);
if (parent.getElementsByClassName) {
res = parent.getElementsByClassName(obj);
if (!res.length) {
return null;
}
}
else if (!parent && document.getElementsByClassName) {
res = document.getElementsByClassName(obj);
if (!res.length) {
return null;
}
}
else {
var reg = new RegExp(' ' + obj + ' ', 'i');
var ele = null;
if (parent.getElementsByTagName) {
ele = parent.getElementsByTagName('*');
} else {
ele = document.getElementsByTagName('*');
}
for (var i = 0; i < ele.length; i++) {
if (reg.test(' ' + ele[i].className + ' ')) {
res.push(ele[i]);
}
}
}
if (res) {
if (res.length === 0) {
res = null;
}
}
break;
case '#':
obj = obj.substr(1, obj.length);
if (parent.getElementById) {
res = parent.getElementById(obj);
} else {
res=document.getElementById(obj);
}
break;
default:
var reg = new RegExp(' ' + obj + ' ', 'i');
if (parent.getElementsByTagName) {
res = parent.getElementsByTagName(obj);
} else {
res = document.getElementsByTagName(obj);
}
if (res) {
if (obj == 'body' || obj == 'document' || obj == 'html') {
res = res[0];
} else if (res.length === 0) {
res = null;
}
} else {
res = null;
}
break;
}
}
else {
res = obj;
}
}
else {
res = document;
}
if (res) {
if (valType(res) == 'htmlobject' || valType(res) == 'object' || valType(res) == 'document') {
res.ckplayer = 'Thanks for using';
/*
* find
* 功能在当前节点中查找指定节点
*/
res.find = function(obj) {
return $(obj, this);
};
/*
* attr
* 功能修改或获取节点的属性值
* @key不能为空指属性名称$value不为空则设置属性值为空则获取属性值
*/
res.attr = function(key, value) {
if (isUndefined(value)) {
return this.getAttribute(key);
}
else {
this.setAttribute(key, value);
return this;
}
};
/*
* removeAtt
* 功能删除节点的属性值
* @key不能为空指属性名称
*/
res.removeAttr = function(key) {
this.removeAttribute(key);
return this;
};
/*
* css
* 功能修改或获取节点的样式样式
* @key不能为空指属性名称$value不为空则设置属性值为空则获取属性值
*/
res.css = function(key, value) {
// 拆解字符串并将第二单词首字母大写
var keyNew = function(str) {
// 当属性名有横杠时
if (str.indexOf('-') != -1) {
var arr = str.split('-');
var a = arr[0];
var b = '',
c = '';
if (arr.length > 1) {
b = arr[1].substr(0, 1).toLocaleUpperCase() + arr[1].substr(1, arr[1].length - 1);
}
if (arr.length > 2) {
b = arr[2].substr(0, 1).toLocaleUpperCase() + arr[2].substr(1, arr[2].length - 1);
}
return a + b + c;
}
// 没有横杠就不进行字符串拆解
return str;
};
if (isUndefined(value)){
if (!isUndefined(key) && valType(key) == 'string') {
if (this.currentStyle) {
return this.currentStyle[key];
} else {
return document.defaultView.getComputedStyle(this, null)[key];
}
}
if (isUndefined(key)) {
if (this.currentStyle) {
return this.currentStyle;
} else {
return document.defaultView.getComputedStyle(this, null);
}
}
}
// 当传进来的参数key不是一个对象给节点添加css样式
if (valType(key) != 'object') {
var newKey = keyNew(key);
if (this.length > 1) {
// 如果this有多个值那给每个节点都添加样式
for (var i = 0; i < this.length; i++) {
this[i].style[newKey] = value;
}
} else {
this.style[newKey] = value;
}
} else {
//如果第一个值是一个对象,遍历这个对象,并将属性名传进函数进行拆解
for (var item in key) {
var objKey = keyNew(item);
if (valType(this) == 'htmlarray') {
for (var i = 0; i < this.length; i++) {
this[i].style[objKey] = key[item];
}
} else {
this.style[objKey] = key[item];
}
}
}
return this;
};
res.hasClass = function(cName) {
if (isUndefined(cName)) return false;
var reg = new RegExp('(\\s|^)' + cName + '(\\s|$)');
if (this.className && this.className.match(reg)) {
return true;
}
return false;
};
res.addClass = function(cName) {
if (!this.hasClass(cName)) {
if (this.className && this.className.substr(this.className.length - 1, 1) != ' ') {
this.className += ' ';
}
this.className += cName;
};
return this;
};
res.removeClass = function(cName) {
if (this.hasClass(cName)) {
this.className = this.className.replace(new RegExp('(\\s|^)' + cName + '(\\s|$)'), ' ');
if (this.className.substr(this.className.length - 1, 1) == ' ') {
this.className = this.className.substr(0, this.className.length - 1);
}
if (!this.className) {
this.removeAttribute('class');
}
};
return this;
};
res.searchClass = function(cName) {
var arr = this.className.split(' ');
for (var i = 0; i < arr.length; i++) {
if (arr[i].substr(0, cName.length) == cName) {
return arr[i];
}
}
return this;
};
res.removeCss=function(cName){
var cs=this.attr('style');
if(cs){
var arr=cs.split(';');
var obj={};
for(var i=0;i<arr.length;i++){
var arrT=arr[i].split(':');
if(arrT.length==2 && arrT[0] && arrT[0].trim()!=cName){
obj[arrT[0].trim()]=arrT[1].trim();
}
}
this.attr('style','');
this.css(obj);
}
};
res.addListener = function(e, f, t) {
return addListener(this, e, f, t);
};
res.removeListener = function(e, f, t) {
return removeListener(this, e, f, t);
};
res.prev = function() {
return prev(this);
};
res.next = function() {
return next(this);
};
res.append =function(ele){
this.appendChild(ele);
return this;
};
res.remove = function() {
if(!isUndefined(this.parentNode)){
this.parentNode.removeChild(this);
}
return null;
};
res.bind=function(e, f, t) {
return addListener(this, e, f, t);
};
res.unbind =function(e,f){
var i=0;var arr=[];
if(!isUndefined(f)){
res.removeListener(e,f);
}
else if(!isUndefined(e)){
if(!isUndefined(this.listenerList)){
arr=this.listenerList;
for(i=0;i<arr.length;i++){
if(arr[i][0]==e){
res.removeListener(e,arr[i][1]);
}
}
}
}
else{
if(!isUndefined(this.listenerList)){
arr=this.listenerList;
for(i=0;i<arr.length;i++){
res.removeListener(arr[i][0],arr[i][1]);
}
}
}
};
/*
* htm
* 功能设置或获取html
*/
res.htm=function(val){
if(!isUndefined(val)){
res.innerHTML=val;
}
else{
return res.innerHTML;
}
};
/*
* htmReplace
* 功能将html中ar替换成val
*/
res.htmReplace=function(ar,val,html){
if(!isUndefined(val) && !isUndefined(ar)){
if(isUndefined(this.attr('data-htm'))){
this.attr('data-htm',html);
}
var htm=this.attr('data-htm');
var reg = new RegExp(ar , 'g');
htm=htm.replace(reg , val);
this.htm(htm);
}
};
/*
* offset
* 功能获取节点的绝对坐标
*/
res.offset = function() {
var par = this.offsetParent,
//获取当前节点的父参照物(不一定是父节点)
left = this.offsetLeft,
//获取当前节点相对父节点左偏离
top = this.offsetTop;
//获取当前节点相对父节点上偏移
while (par && par.tagName !== 'BODY') {
//判断是否已经到了最外一层 并且判断父参照物存不存在
if (!/MSIE 8\.0/.test(navigator.userAgent)){
//利用正则表达式判断
left += par.clientLeft;
top += par.clientTop;
}
left += par.offsetLeft;
//获得节点距离父节点左偏移多少
top += par.offsetTop;
//获得节点距离父节点上偏移多少
par = par.offsetParent;
}
return {
top: top,
left: left
}
};
/*
* fixed
* 功能判断节点是否悬浮于页面
*/
res.fixed = function() {
if (this.css('position') == 'fixed') {
return true;
}
if (!isUndefined(this.offsetParent)) {
return $(this.offsetParent).fixed();
}
return false;
};
/*
* getWidth
* 功能获取节点的宽
*/
res.getWidth = function() {
return this.offsetWidth;
};
/*
* getHeight
* 功能获取节点的高
*/
res.getHeight = function() {
return this.offsetHeight;
};
if(isUndefined(res.width)){
res.width=function(){
return this.offsetWidth;
}
}
if(isUndefined(res.height)){
res.height=function(){
return this.offsetWidth;
}
}
/*
* resize
* 功能监听窗口尺寸变化
* @fn窗口变化时执行的函数
*/
res.resize = function(fn) {
addListener(window, 'resize', fn);
};
/*
* click
* 功能节点单击时执行的函数
* @fn执行的函数
*/
res.click =function(fn){
addListener(this,'click',fn);
return this;
};
/*
* singleClick
* 功能节点单击事件当使用该事件时会同时注册双击事件此时不要使用click函数进行单击事件监听
* @fn执行的函数
*/
res.singleClick=function(fn){
if(isUndefined(this.dbClick)){
doubleClickEvent(this);
this.dbClick=true;
}
this.addListener('sigClick',fn);
return this;
};
/*
* doubleClick
* 功能节点双击事件当使用该事件时会同时注册双击事件此时不要使用click函数进行单击事件监听
* @fn执行的函数
*/
res.doubleClick=function(fn){
if(isUndefined(this.dbClick)){
doubleClickEvent(this);
this.dbClick=true;
}
this.addListener('dobClick',fn);
return this;
};
/*
* mouseover
* 功能鼠标经过节点时执行的函数
* @fn执行的函数
*/
res.mouseover =function(fn){
addListener(this,'mouseover',fn);
return this;
};
/*
* mouseout
* 功能鼠标离开节点时执行的函数
* @fn执行的函数
*/
res.mouseout =function(fn){
addListener(this,'mouseout',fn);
return this;
};
/*
* mousedown
* 功能鼠标在节点上按下时执行的函数
* @fn执行的函数
*/
res.mousedown =function(fn){
addListener(this,'mousedown',fn);
return this;
};
/*
* mouseup
* 功能节点上鼠标弹起时执行的函数
* @fn执行的函数
*/
res.mouseup =function(fn){
addListener(this,'mouseup',fn);
return this;
};
/*
* mousemove
* 功能鼠标在节点上划行时执行的函数
* @fn执行的函数
*/
res.mousemove =function(fn){
addListener(this,'mousemove',fn);
return this;
};
/*
* mouseWheel
* 功能鼠标滚轮在节点上划行时执行的函数
* @fn执行的函数
*/
res.mouseWheel =function(fn){
addListener(this,'mousewheel',fn);
addListener(this,'DOMMouseScroll',fn,false);
return this;
};
/*
* mouseleave
* 功能鼠标指针移出节点时执行的函数
* @fn执行的函数
*/
res.mouseleave =function(fn){
addListener(this,'mouseleave',fn);
return this;
};
/*
* touchstart
* 功能移动端鼠标在节点上按下时执行的函数
* @fn执行的函数
*/
res.touchstart =function(fn){
addListener(this,'touchstart',fn);
return this;
};
/*
* touchmove
* 功能移动端鼠标在节点上划行时执行的函数
* @fn执行的函数
*/
res.touchmove =function(fn){
addListener(this,'touchmove',fn);
return this;
};
/*
* touchend
* 功能移动端节点上鼠标弹起时执行的函数
* @fn执行的函数
*/
res.touchend =function(fn){
addListener(this,'touchend',fn);
return this;
};
/*
* show
* 功能显示节点
*/
res.show=function(){
this.css('display','block');
return this;
};
/*
* hide
* 功能隐藏节点
*/
res.hide=function(){
this.css('display','none');
return this;
};
/*
animate
功能缓动效果
parameter:String=需要改变的属性left,top,width,height,alpha,
totalTime:Number=运动的总毫秒数
easing:String=效果名称,
callBack:完成后的回调函数
*/
res.animate=function(parameter,totalTime,easing,callBack) {
if(isUndefined(this.CK)){
return res;
}
var thisTemp = this;
var parNode=this.CK;
var w =parNode.getWidth(),h = parNode.getHeight();
var speed=10;//跳针时间
this.timerTween=null;
this.tweenPlay=true;
if(isUndefined(parameter)){
return this;
}
if (isUndefined(totalTime) || totalTime== 0) {
totalTime=1000;
}
if(isUndefined(easing) || easing==''){
easing='None.easeIn';
}
var effArr = easing.split('.');
var tween = {
None: { //均速运动
easeIn: function(t, b, c, d) {
return c * t / d + b;
},
easeOut: function(t, b, c, d) {
return c * t / d + b;
},
easeInOut: function(t, b, c, d) {
return c * t / d + b;
}
},
Quadratic: {
easeIn: function(t, b, c, d) {
return c * (t /= d) * t + b;
},
easeOut: function(t, b, c, d) {
return - c * (t /= d) * (t - 2) + b;
},
easeInOut: function(t, b, c, d) {
if ((t /= d / 2) < 1) return c / 2 * t * t + b;
return - c / 2 * ((--t) * (t - 2) - 1) + b;
}
},
Cubic: {
easeIn: function(t, b, c, d) {
return c * (t /= d) * t * t + b;
},
easeOut: function(t, b, c, d) {
return c * ((t = t / d - 1) * t * t + 1) + b;
},
easeInOut: function(t, b, c, d) {
if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
return c / 2 * ((t -= 2) * t * t + 2) + b;
}
},
Quartic: {
easeIn: function(t, b, c, d) {
return c * (t /= d) * t * t * t + b;
},
easeOut: function(t, b, c, d) {
return - c * ((t = t / d - 1) * t * t * t - 1) + b;
},
easeInOut: function(t, b, c, d) {
if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;
return - c / 2 * ((t -= 2) * t * t * t - 2) + b;
}
},
Quintic: {
easeIn: function(t, b, c, d) {
return c * (t /= d) * t * t * t * t + b;
},
easeOut: function(t, b, c, d) {
return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
},
easeInOut: function(t, b, c, d) {
if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;
return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
}
},
Sine: {
easeIn: function(t, b, c, d) {
return - c * Math.cos(t / d * (Math.PI / 2)) + c + b;
},
easeOut: function(t, b, c, d) {
return c * Math.sin(t / d * (Math.PI / 2)) + b;
},
easeInOut: function(t, b, c, d) {
return - c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
}
},
Exponential: {
easeIn: function(t, b, c, d) {
return (t == 0) ? b: c * Math.pow(2, 10 * (t / d - 1)) + b;
},
easeOut: function(t, b, c, d) {
return (t == d) ? b + c: c * ( - Math.pow(2, -10 * t / d) + 1) + b;
},
easeInOut: function(t, b, c, d) {
if (t == 0) return b;
if (t == d) return b + c;
if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
return c / 2 * ( - Math.pow(2, -10 * --t) + 2) + b;
}
},
Circular: {
easeIn: function(t, b, c, d) {
return - c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
},
easeOut: function(t, b, c, d) {
return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
},
easeInOut: function(t, b, c, d) {
if ((t /= d / 2) < 1) return - c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
}
},
Elastic: {
easeIn: function(t, b, c, d, a, p) {
if (t == 0) return b;
if ((t /= d) == 1) return b + c;
if (!p) p = d * .3;
if (!a || a < Math.abs(c)) {
a = c;
var s = p / 4;
} else var s = p / (2 * Math.PI) * Math.asin(c / a);
return - (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
},
easeOut: function(t, b, c, d, a, p) {
if (t == 0) return b;
if ((t /= d) == 1) return b + c;
if (!p) p = d * .3;
if (!a || a < Math.abs(c)) {
a = c;
var s = p / 4;
} else var s = p / (2 * Math.PI) * Math.asin(c / a);
return (a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b);
},
easeInOut: function(t, b, c, d, a, p) {
if (t == 0) return b;
if ((t /= d / 2) == 2) return b + c;
if (!p) p = d * (.3 * 1.5);
if (!a || a < Math.abs(c)) {
a = c;
var s = p / 4;
} else var s = p / (2 * Math.PI) * Math.asin(c / a);
if (t < 1) return - .5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
}
},
Back: {
easeIn: function(t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c * (t /= d) * t * ((s + 1) * t - s) + b;
},
easeOut: function(t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
},
easeInOut: function(t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
}
},
Bounce: {
easeIn: function(t, b, c, d) {
return c - tween.Bounce.easeOut(d - t, 0, c, d) + b;
},
easeOut: function(t, b, c, d) {
if ((t /= d) < (1 / 2.75)) {
return c * (7.5625 * t * t) + b;
} else if (t < (2 / 2.75)) {
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
} else if (t < (2.5 / 2.75)) {
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
} else {
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
}
},
easeInOut: function(t, b, c, d) {
if (t < d / 2){
return tween.Bounce.easeIn(t * 2, 0, c, d) * .5 + b;
}
else{
return tween.Bounce.easeOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
}
}
}
};
if(effArr.length!=2){
return null;
}
if (!(effArr[0] in tween)) {
return null;
}
if (!(effArr[1] in tween[effArr[0]])) {
return null;
}
var tweenFun = tween[effArr[0]][effArr[1]];
var getStartAndEnd=function(arr){//分析初始化位置和结束位置
var vars=arr[1];
var current=0,result=0;
switch (arr[0]) {
case 'width':
current = thisTemp.getWidth();
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars) * h * 0.01;
}
else{
result=parseInt(vars);
}
break;
case 'height':
current = thisTemp.getHeight();
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars) * h * 0.01;
}
else{
result=parseInt(vars);
}
break;
case 'left':
if(!isUndefined(thisTemp.css('left'))){
current=parseInt(thisTemp.css('left'));
}
else{
current = thisTemp.offset()['left']-parNode.offset()['left'];
}
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars) * w * 0.01;
}
else{
result=parseInt(vars);
}
thisTemp.css('right','auto');
break;
case 'right':
if(!isUndefined(thisTemp.css('right'))){
current=parseInt(thisTemp.css('right'));
}
else{
current = parNode.getWidth()-(thisTemp.offset()['left']-parNode.offset()['left']+thisTemp.getWidth());
}
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars) * w * 0.01;
}
else{
result=parseInt(vars);
}
thisTemp.css('left','auto');
break;
case 'top':
if(!isUndefined(thisTemp.css('top'))){
current=parseInt(thisTemp.css('top'));
}
else{
current = thisTemp.offset()['top']-parNode.offset()['top'];
}
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars) * h * 0.01;
}
else{
result=parseInt(vars);
}
thisTemp.css('bottom','auto');
break;
case 'bottom':
if(!isUndefined(thisTemp.css('bottom'))){
current=parseInt(thisTemp.css('bottom'));
}
else{
current = parNode.getHeight()-(thisTemp.offset()['top']-parNode.offset()['top']+thisTemp.getHeight());
}
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars) * h * 0.01;
}
else{
result=parseInt(vars);
}
thisTemp.css('top','auto');
break;
case 'alpha':
if(!isUndefined(thisTemp.css('filter')) && thisTemp.css('filter')!='none'){
current=Number(thisTemp.css('filter'))*100;
}
else if(!isUndefined(thisTemp.css('opacity')) && thisTemp.css('opacity')!='none'){
current=thisTemp.css('opacity')*100;
}
else{
current = 100;
}
if (vars.substring(vars.length - 1, vars.length) == '%') {
result = parseInt(vars);
}
else{
result=vars*100;
}
break;
}
result-=current;
if(current!=result){
return {
'type':arr[0],
'current':current,
'result':result
};
}
return null;
};
var stopTween = function() {
if (thisTemp.timerTween != null) {
clearInterval(thisTemp.timerTween);
thisTemp.timerTween = null;
}
};
parameter=parameter.replace(/[ ]*,[ ]*|[ ]+/g, ';');
var newCss=[];
var parameterArr=parameter.split(';');
for(var i=0;i<parameterArr.length;i++){
var cssArr=parameterArr[i].split(':');
if(cssArr.length==2){
var temp=getStartAndEnd(cssArr);
if(temp){
newCss.push(temp)
}
}
}
var funTime=0;
var timeFun=function(){
var styleObj={};
if(thisTemp.tweenPlay){
if (funTime < totalTime) {
funTime += speed;
for(var i=0;i<newCss.length;i++){
var ob=newCss[i];
var ap =Math.ceil(tweenFun(funTime, ob['current'], ob['result'], totalTime));
switch(ob['type']){
case 'width':
styleObj['width']=ap + 'px';
styleObj['overflow']='hidden';
break;
case 'height':
styleObj['height']=ap + 'px';
styleObj['overflow']='hidden';
break;
case 'left':
styleObj['left']=ap + 'px';
break;
case 'right':
styleObj['right']=ap + 'px';
break;
case 'top':
styleObj['top']=ap + 'px';
break;
case 'bottom':
styleObj['bottom']=ap + 'px';
break;
case 'alpha':
styleObj['filter']='alpha(opacity:' + ap*0.01 + ')';
styleObj['opacity']=ap*0.01;
break;
}
}
thisTemp.css(styleObj);
}
else{
stopTween();
if(!isUndefined(callBack)){
callBack(thisTemp);
}
}
}
};
stopTween();
this.timerTween=setInterval(timeFun,speed);
return this;
};
/*
* animatePlay
* 功能播放缓动动画
*/
res.animatePlay=function(){
if(!isUndefined(this.timerTween)){
this.tweenPlay=true;
}
return this;
};
/*
* animatePause
* 功能暂停缓动动画
*/
res.animatePause=function(){
if(!isUndefined(this.timerTween)){
this.tweenPlay=false;
}
return this;
};
} else {
/*
* each
* 功能当相同节点数量大于0时使用该函数可以进行循环节点
* @fn循环节点时执行的函数
*/
res.each = function(fn) {
for (var i in this) {
if (this.hasOwnProperty(i)) {
if (valType(this[i]) == 'htmlobject') {
fn(i, this[i]);
} else {
try {
if (!this[0].nodeName) fn(i, this[i]);
} catch (e) {
fn(i, this[i]);
}
}
}
}
};
/*
* eq
* 功能根据索引返回指定节点
* @m为索引数字
*/
res.eq = function(m) {
if (valType(this) == 'htmlarray') {
if (this.length >= m + 1) {
return this[m];
}
return null;
}
return null;
};
for (var i = 0; i < res.length; i++) {
if ($) {
try {
res[i] = $(res[i]);
} catch (event) {}
}
}
}
}
return res;
},
/*
* createlDiv
* 功能新建一个DIV节点
*/
createlDiv=function(className,html) {
var ele = document.createElement('div');
var eleObject = $(ele);
if (className) {
eleObject.addClass(className);
}
if(html){
eleObject.htm(html);
}
return eleObject;
},
/*
* createlVideo
* 功能新建一个video节点
*/
createlVideo=function() {
var ele = document.createElement('video');
var eleObject = $(ele);
return eleObject;
},
/*
* createlButton
* 功能新建一个button节点
*/
createlButton=function(className,html) {
var ele = document.createElement('button');
var eleObject = $(ele);
eleObject.attr('type','button');
if (className) {
eleObject.addClass(className);
}
if(html){
eleObject.htm(html);
}
return eleObject;
},
/*
* createlA
* 功能新建一个a节点
*/
createlA=function(html,href,className) {
var ele = document.createElement('a');
var eleObject = $(ele);
if(html){
eleObject.htm(html);
}
if(!isUndefined(href) && href){
eleObject.attr('href',href);
eleObject.attr('target','_blank');
}
if (className) {
eleObject.addClass(className);
}
return eleObject;
},
/*
* createlJsLink
* 功能新建一个a节点
*/
createlJsLink=function(html,js) {
var ele = document.createElement('a');
var eleObject = $(ele);
if(html){
eleObject.htm(html);
}
if(!isUndefined(js) && js){
eleObject.attr('href','javascript:'+js+'()');
}
else{
eleObject.attr('href','javascript:;');
}
return eleObject;
},
/*
* createlImg
* 功能新建一个img节点
*/
createlImg=function(file,className) {
var ele = document.createElement('img');
var eleObject = $(ele);
if (className) {
ele.className = className;
}
if(file){
ele.src=file;
}
return eleObject;
},
/*
* getClient
* 功能获取clientX和clientY
*/
getClient=function(event) {
var eve = event || window.event;
if (isUndefined(eve)) {
eve = {
clientX: 0,
clientY: 0
};
}
var x=eve.clientX + (document.documentElement.scrollLeft || $('body').scrollLeft),
y=eve.clientY + (document.documentElement.scrollTop || $('body').scrollTop);
if(isUndefined(x.toString()) || x.toString()=='NaN'){
x=eve.touches[0].clientX
}
if(isUndefined(y.toString()) || y.toString()=='NaN'){
y=eve.touches[0].clientY
}
if(x.toString()=='NaN'){
x=0;
}
if(y.toString()=='NaN'){
y=0;
}
return {
x: x,
y: y
}
},
/*
* getLiveTime
* 功能获取直播回放时间
*/
getLiveTime=function(){
var notTime=Date.now();
var varsTime=vars['live'];
if(varsTime.toString().length<13){
varsTime=varsTime*1000;
}
return notTime-varsTime;
},
/*
* formatLiveTime
* 功能将直播的时间戳格式化成标准时间
*/
formatLiveTime=function(time){
var varsTime=vars['live'];
if(varsTime.toString().length<13){
varsTime=varsTime*1000;
}
varsTime+=time;
return language['lookBack']+date('H:i:s',varsTime);
},
/*
* loadJs
* 功能加载js文件并在加载完成后执行callback函数
* @filejs文件地址
* @callback加载完成后执行的函数
*/
loadJs=function(file, callback) {
var fn =function() {};
if(!isUndefined(callback)){
fn=callback;
}
if(checkJs(file)){
fn();
return;
}
var script = document.createElement('script');
script.type = 'text/javascript';
var isReady = false;
var timer = null;
var doReady = function() {
if(timer){
clearInterval(timer);
}
if(isReady) return;
isReady = true;
if(valType(fn) == 'function') {
fn();
}
};
var bodyLoad = function() {
timer = setInterval(function() {
try {
if(!isUndefined(script.readyState) && script.readyState == 'complete') {
doReady();
}
} catch(event) {};
}, 10);
};
var w3c = function() {
if(valType(fn) == 'function') {
fn();
}
removeListener(script, 'load', w3c);
removeListener(script, 'error', w3cError);
};
var w3cError = function() {
if(valType(fn) == 'function') {
fn();
}
removeListener(script, 'load', w3c);
removeListener(script, 'error', w3cError);
};
try {
addListener(script, 'load', w3c);
addListener(script, 'error', w3cError);
} catch(event) {
bodyLoad();
}
script.src = file;
$('head').eq(0).append(script);
},
/*
* doubleClickEvent
* 功能注册对象双击功能
* @ele注册对象可以是页面中的任意节点不支持数组形式
*/
doubleClickEvent=function(ele){
var setTime=null;//注册延时函数
var clickTime=0;//记录点击时间
ele=$(ele);
ele.click(function(){
if(!setTime){
setTime=setTimeout(function(){
try{
ele.dispatchEvent(new Event('sigClick'));//注册单击,针对视频播放器使用
}
catch(event){
var e = document.createEvent('HTMLEvents');
e.initEvent('sigClick', false, true);
ele.dispatchEvent(e);
}
clickTime=0;
setTime=null;
},260);
}
if(!clickTime){
clickTime=new Date().getTime();
}
else{
if(new Date().getTime()-clickTime<230){//认为是双击
try{
ele.dispatchEvent(new Event('dobClick'));//注册双击
}
catch(event){
var e = document.createEvent('HTMLEvents');
e.initEvent('dobClick', false, true);
ele.dispatchEvent(e);
}
clearTimeout(setTime);
clickTime=0;
setTime=null;
}
}
});
},
/*
* noScrolling
* 功能禁止页面滚动操作
*/
noScrolling=function(b){
if(isUndefined(b)) b=false;
var bodyScroll=function (event){
event.preventDefault();
};
if(b){ //禁止滚动
$('body').addListener('touchmove', bodyScroll, {passive: false });
}
else{ //开启滚动
$('body').removeListener('touchmove',bodyScroll, {passive: false});
}
};
return into(videoObj);
}
/*
* ajax
* 功能ajax功能
* @cObj:传递的参数包含请求地址请求类型编码等
*/
function ajax(cObj) {
var callback = null;
var obj = {
method: 'get',//请求类型
dataType: 'json',//请求的数据类型
charset: 'utf-8',
async: true,//true表示异步false表示同步
url: '',
data: null,
success: null,
error:null
};
obj = standardization(obj, cObj);
if (isUndefined(obj['url'])) {
return;
}
/*
* errorFun
*功能执行error
*/
var errorFun=function(info){
if(!isUndefined(obj['error']) && valType(obj['error'])=='function'){
obj['error'](info);
}
else{
obj['success'](null);
}
};
/*
* successFun
*功能执行success
*/
var successFun=function(success){
if(!isUndefined(obj['success']) && valType(obj['success'])=='function'){
obj['success'](success);
}
};
/*
* createXHR
*功能用来为ajax函数提供支持
*/
var createXHR=function() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
return new ActiveXObject('Microsoft.XMLHTTP');
} catch(event) {
try {
return new ActiveXObject('Msxml2.XMLHTTP');
} catch(event) {}
}
}
};
/*
* formatParams
* 功能将对象转成地址字符串为ajax函数提供支持
* @obj传递一个对象
*/
var formatParams=function(obj) {
var arr = [];
for (var key in obj) {
arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
return arr.join('&');
};
if (valType(cObj) != 'object') {
if(!isUndefined(obj['error'])){
obj.error(event);
}
return;
}
if (obj.dataType === 'json' || obj.dataType === 'text' || obj.dataType === 'html' || obj.dataType === 'xml') {
var xhr = createXHR();
callback = function() {
//判断http的交互是否成功
if (xhr.status === 200) {
if (obj.dataType === 'json') {
try {
successFun(eval('(' + xhr.responseText + ')')); //回调传递参数
}
catch(event) {
successFun(null);
}
} else {
successFun(xhr.responseText); //回调传递参数
}
}
else {
errorFun({code:xhr.status,message:xhr.statusText});
}
};
obj.data = formatParams(obj.data); //通过params()将名值对转换成字符串
if (obj.method === 'get' && !isUndefined(obj.data)) {
if (obj.data != '') {
if (obj.url.indexOf('?') == -1) {
obj.url += '?' + obj.data
} else {
obj.url += '&' + obj.data;
}
}
}
if (obj.async === true) { //true表示异步false表示同步
addListener(xhr,'readystatechange',function(event){
if (this.readyState === 4 && callback != null) { //判断对象的状态是否交互完成
callback(); //回调
}
});
}
xhr.open(obj.method, obj.url, obj.async);
if (obj.method === 'post') {
try{
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('charset', obj['charset']);
xhr.send(obj.data);
}
catch(event){
callback();
}
}
else {
try{
xhr.send(null); //get方式则填null
}
catch(event){
callback();
}
}
if (obj.async === false) { //同步
callback();
}
}
else if (obj.dataType === 'jsonp') {
var oHead = document.getElementsByTagName('head')[0];
var oScript = document.createElement('script');
var callbackName = 'callback' + new Date().getTime();
var params = formatParams(obj.data) + '&callback=' + callbackName; //按时间戳拼接字符串
//拼接好src
oScript.src = obj.url.split('?') + '?' + params;
//插入script标签
oHead.insertBefore(oScript, oHead.firstChild);
//jsonp的回调函数
window[callbackName] = function(json) {
if(!isUndefined(obj['success']) && valType(obj['success'])==='function'){
obj['success'](json);
}
oHead.removeChild(oScript);
};
}
}
/*
* documentReady
* 功能判断页面加载完成
* @fn页面加载完成后执行的函数
*/
function documentReady(fn) {
var isReady = false;
var timer = null;
var doReady = function() {
if(timer) clearInterval(timer);
if(isReady) return;
isReady = true;
if(valType(fn) == 'function') {
fn();
}
};
var bodyLoad = function() {
timer = setInterval(function() {
try {
if(!isUndefined(document.readyState) && document.readyState == 'complete') {
doReady();
}
} catch(event) {};
}, 10);
};
var w3c = function() {
if(valType(fn) == 'function') {
fn();
}
removeListener(window, 'load', w3c);
};
if(!isUndefined(document.body)){
if(valType(fn) == 'function') {
fn();
}
}
else{
try {
addListener(window, 'load', w3c);
} catch(event) {
bodyLoad();
}
}
}
/*
* getPath
* 功能获取该js文件所在路径
*/
function getPath(siz) {
var scriptList = document.scripts,
thisPath = scriptList[scriptList.length - 1].src;
for (var i = 0; i < scriptList.length; i++) {
var scriptName = scriptList[i].getAttribute('name') || scriptList[i].getAttribute('data-name');
var src = scriptList[i].src.slice(scriptList[i].src.lastIndexOf('/') + 1, scriptList[i].src.lastIndexOf('.'));
if ((scriptName && (scriptName == 'ckplayer' || scriptName == 'ckplayer.min')) || (scriptList[i].src && (src == 'ckplayer' || src == 'ckplayer.min'))) {
thisPath = scriptList[i].src;
break;
}
}
var path=thisPath.substring(0, thisPath.lastIndexOf('/js/') + 1);
if(!isUndefined(siz)){
path+=siz+'/';
}
return path;
}
/*
* checkJs
* 功能判断js是否已加载
* @filejs文件路径
*/
function checkJs(file) {
var scriptList = document.scripts;
for (var i = 0; i < scriptList.length; i++) {
if(scriptList[i].src==file){
return scriptList[i];
}
}
return false;
}
/*
* getMaxZIndex
* 功能获取当前页面最大深度
*/
function getMaxZIndex() {
var arr = document.all || document.querySelectorAll('*');
var maxZ = -1;
for (var i = 0; i < arr.length; i++) {
var temp = null;
try {
temp = window.getComputedStyle(arr[i], null).zIndex;
} catch (event) {
if (arr[i].style) {
temp = arr[i].style.zIndex;
}
}
if (temp != 'auto' && parseInt(temp) > maxZ) {
maxZ = parseInt(temp);
}
}
return maxZ;
}
/*
* getWindowSize
* 功能获取window的宽和高
*/
function getWindowSize() {
return {
width: window.innerWidth,
height: window.innerHeight
};
}
/*
* standardization
* 功能将对象Object标准化将n对象替换进o对象
* @o:标准化对象@n外部传递对象
*/
function standardization(o, n) { //n替换进o
var h = {};
var k;
for (k in o) {
h[k] = o[k];
}
for (k in n) {
if(k in h){
h[k] = n[k];
}
}
return h;
}
/*
* mergeObj
* 功能将新对象合并到原对象中需要确保原对像里有对应的值并且类型一样
* @o:原对象@n新对象
*/
function mergeObj(o,n){
var h = {};
var k;
for (k in o) {
h[k] = o[k];
}
for (k in n) {
if(k in h){
switch(valType(h[k])){
case 'object':
if(valType(n[k])=='object'){
h[k] = mergeObj(h[k],n[k]);
}
break;
default:
if(valType(h[k])==valType(n[k])){
h[k] = n[k];
}
break;
}
}
}
return h;
}
/*
* valType
* 功能判断变量类型
*/
function valType(val) {
if(typeof val==='undefined') return 'undefined';
var str=Object.prototype.toString.call(val).split(' ')[1].replace(']','').toLowerCase();
if(str.substr(0,4)=='html' && (str.substr(-7)=='element' || str.substr(-8)=='document' || str=='window')){
str='htmlobject';
}
if(str=='htmlcollection' || str=='nodelist'){
str='htmlarray';
}
return str;
}
/*
* isUndefined
* 功能判断变量是否存在或值是否为undefined
*/
function isUndefined(val) {
try {
return valType(val)==='undefined' || val === undefined || val === null || (valType(val)==='number' && isNaN(val));
} catch (event) {
return true;
}
return false;
}
/*
* prev
* 功能获取指定节点前一个同胞节点
* @ele要获取的节点
*/
function prev(ele) {
var e = ele.previousSibling;
if (e == null) { //测试同胞节点是否存在,否则返回空
return null;
}
if (e.nodeType == 3) { //如果同胞节点为文本节点
var t = prev(e);
if (t && t.nodeType == 1) {
return t;
}
} else {
if (e.nodeType == 1) { //确认节点为节点节点才返回
return e;
} else {
return false;
}
}
}
/*
* next
* 功能获取指定节点下一个同胞节点
* @ele要获取的节点
*/
function next(ele) {
var e = ele.nextSibling;
if (e == null) { //测试同胞节点是否存在,否则返回空
return null;
}
if (e.nodeType == 3) { //如果同胞节点为文本节点
var t = next(e);
if (t && t.nodeType == 1) {
return t;
}
} else {
if (e.nodeType == 1) { //确认节点为节点才返回
return e;
} else {
return false;
}
}
}
/*
* addListener
* 功能事件监听
* @ele监听对象@e事件名称@f返回事件函数
*/
function addListener(ele, e, f, t) {
if (isUndefined(t)) {
t = false;
}
if (ele.addEventListener) {
try {
ele.addEventListener(e, f, t);
} catch (event) {}
} else if (ele.attachEvent) {
try {
ele.attachEvent('on' + e, f);
} catch (event) {}
} else {
ele['on' + e] = f;
}
if(isUndefined(ele.listenerList)){
ele.listenerList=[];
}
ele.listenerList.push([e,f]);
return ele;
};
/*
* removeListener
* 功能删除事件监听
* @ele监听对象@e事件名称@f返回事件函数
*/
function removeListener(ele, e, f, t) {
if (isUndefined(t)) {
t = false;
}
if (ele.removeEventListener) {
try {
ele.removeEventListener(e, f, t);
} catch (e) {}
} else if (ele.detachEvent) {
try {
ele.detachEvent('on' + e, f);
} catch (e) {}
} else {
ele['on' + e] = null;
}
if(!isUndefined(ele.listenerList)){
var temp=[];
for(var i=0;i<ele.listenerList.length;i++){
if(ele.listenerList[i][0]!=e || ele.listenerList[i][1]!=f){
temp.push(ele.listenerList[i]);
}
}
ele.listenerList=temp;
}
return ele;
}
/*
* formatSeconds
* 功能將秒转化成时分秒
*/
function formatSeconds(val) {
if(isUndefined(val)) val=0;
var result = parseInt(val);
if(isUndefined(result)) result=0;
if(result<0) result=0;
var h = Math.floor(result / 3600) < 10 ? '0' + Math.floor(result / 3600) : Math.floor(result / 3600),
m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60)),
s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60)),
res = '';
if(h !== '00') res += h+':';
res += m+':'+s;
return res;
}
/*
* date
* 功能格式化的时间字符串
*/
function date(format, timestamp) {
if(isUndefined(timestamp)){
timestamp=new Date();
}
if(timestamp.toString().length<13) timestamp=timestamp*1000;
var a, jsdate = ((timestamp) ? new Date(timestamp) : new Date());
var pad = function(n, c) {
if((n = n + '').length < c) {
return new Array(++c - n.length).join('0') + n;
} else {
return n;
}
};
var txt_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var txt_ordin = {
1: 'st',
2: 'nd',
3: 'rd',
21: 'st',
22: 'nd',
23: 'rd',
31: 'st'
};
var txt_months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var f = {
// Day
d: function() {
return pad(f.j(), 2)
},
D: function() {
return f.l().substr(0, 3)
},
j: function() {
return jsdate.getDate()
},
l: function() {
return txt_weekdays[f.w()]
},
N: function() {
return f.w() + 1
},
S: function() {
return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
},
w: function() {
return jsdate.getDay()
},
z: function() {
return(jsdate - new Date(jsdate.getFullYear() + '/1/1')) / 864e5 >> 0
},
// Week
W: function() {
var a = f.z(),
b = 364 + f.L() - a;
var nd2, nd = (new Date(jsdate.getFullYear() + '/1/1').getDay() || 7) - 1;
if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
return 1;
} else {
if(a <= 2 && nd >= 4 && a >= (6 - nd)) {
nd2 = new Date(jsdate.getFullYear() - 1 + '/12/31');
return date('W', Math.round(nd2.getTime() / 1000));
} else {
return(1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
}
}
},
// Month
F: function() {
return txt_months[f.n()]
},
m: function() {
return pad(f.n(), 2)
},
M: function() {
return f.F().substr(0, 3)
},
n: function() {
return jsdate.getMonth() + 1
},
t: function() {
var n;
if((n = jsdate.getMonth() + 1) == 2) {
return 28 + f.L();
} else {
if(n & 1 && n < 8 || !(n & 1) && n > 7) {
return 31;
} else {
return 30;
}
}
},
// Year
L: function() {
var y = f.Y();
return(!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
},
//o not supported yet
Y: function() {
return jsdate.getFullYear()
},
y: function() {
return(jsdate.getFullYear() + '').slice(2)
},
// Time
a: function() {
return jsdate.getHours() > 11 ? 'pm' : 'am'
},
A: function() {
return f.a().toUpperCase()
},
B: function() {
// peter paul koch:
var off = (jsdate.getTimezoneOffset() + 60) * 60;
var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
var beat = Math.floor(theSeconds / 86.4);
if(beat > 1000) beat -= 1000;
if(beat < 0) beat += 1000;
if((String(beat)).length == 1) beat = '00' + beat;
if((String(beat)).length == 2) beat = '0' + beat;
return beat;
},
g: function() {
return jsdate.getHours() % 12 || 12
},
G: function() {
return jsdate.getHours()
},
h: function() {
return pad(f.g(), 2)
},
H: function() {
return pad(jsdate.getHours(), 2)
},
i: function() {
return pad(jsdate.getMinutes(), 2)
},
s: function() {
return pad(jsdate.getSeconds(), 2)
},
//u not supported yet
// Timezone
//e not supported yet
//I not supported yet
O: function() {
var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
if(jsdate.getTimezoneOffset() > 0) t = '-' + t;
else t = '+' + t;
return t;
},
P: function() {
var O = f.O();
return(O.substr(0, 3) + ':' + O.substr(3, 2))
},
//T not supported yet
//Z not supported yet
// Full Date/Time
c: function() {
return f.Y() + '-' + f.m() + '-' + f.d() + 'T' + f.h() + ':' + f.i() + ':' + f.s() + f.P()
},
//r not supported yet
U: function() {
return Math.round(jsdate.getTime() / 1000)
}
};
return format.replace(/([a-zA-Z])/g,function(t, s) {
var ret='';
if(t != s) {
// escaped
ret = s;
} else if(f[s]) {
// a date function exists
ret = f[s]();
} else {
// nothing special
ret = s;
}
return ret;
});
}
/*
* dataURLtoBlob
* 功能base64转blob
*/
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
/*
* decodeURIString
* 功能解码中文
*/
function decodeURIString(obj){
for(var k in obj){
if(valType(obj[k])=='string' && obj[k]){
try{
obj[k]=decodeURI(obj[k]);
}
catch(event){}
}
if(valType(obj[k])=='object'){
obj[k]=decodeURIString(obj[k]);
}
}
return obj;
}
/*
* getApp
* 功能获取平台类型是否是iphone
*/
function getApp(){
var u = navigator.userAgent.toLowerCase();
if(u.indexOf('iphone')>-1){
return 'iphone';
}
}
/*
* cookie
* 功能操作cookie
*/
function cookie(name,value,domain,path){
if(isUndefined(domain)){
domain='';
}
if(isUndefined(path)){
path='/';
}
var ckStr=';domain='+domain+';path='+path;
if(location.protocol=='https'){
ckStr+=';SameSite=None;Secure=true';
}
var set=function(name,value){
var time = 360*24*60*60*1000;
var exp = new Date();
exp.setTime(exp.getTime() + time);
try{
document.cookie = name + '='+ escape (value) + ';expires=' + exp.toGMTString()+ckStr;
}
catch(event){console.error(event)}
},
get=function(name){
var arr,reg=new RegExp('(^| )'+name+'=([^;]*)(;|$)');
if(arr=document.cookie.match(reg)){
return unescape(arr[2]);
}
else{
return null;
}
},
del=function(name){
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=get(name);
if(cval!=null){
document.cookie= name + '='+cval+';expires='+exp.toGMTString()+ckStr;
}
};
if(!isUndefined(name) && !isUndefined(value)){
if(value=='delete'){
del(name);
return null;
}
else{
set(name,value);
return get(name);
}
}
else if(!isUndefined(name) && isUndefined(value)){
return get(name);
}
else if(!isUndefined(name)){
}
}
/*
* arrayToString
* 功能二维数组传化成字符串
*/
function arrayToString(arr) {
var str='';
if(!isUndefined(arr)){
for(var i=0;i<arr.length;i++){
var temp=arr[i];
if(i>0){
str+=',';
}
for(var y=0;y<temp.length;y++){
if(y>0){
str+=';';
}
if(valType(temp[y])=='number'){
str+=parseInt(temp[y]*100);
}
else{
str+=temp[y];
}
}
}
}
return str;
}
/*
* stringToArray
* 功能字符串转化成二维数组
*/
function stringToArray(str) {
var newArr=[];
if(!isUndefined(str)){
var arr=str.split(',');
for(var i=0;i<arr.length;i++){
var temp=arr[i].split(';');
temp[1]=parseInt(temp[1])*0.01;
temp[2]=parseInt(temp[2])*0.01;
newArr.push(temp);
}
}
return newArr;
}
/*
* documentHidden
* 功能监听页面切换到其它标签执行fn函数
*/
function documentHidden(fn){
if(!isUndefined(document.visibilityState)){
fn(document.visibilityState === 'visible'?'show':'hidden');
addListener(document,'visibilitychange',function(){
fn(document.visibilityState === 'visible'?'show':'hidden');
});
}
}
return ckplayerEmbed;
}));