ZhiYeJianKang_PeiXun/Song.Site/Templates/Web/_Public/Scripts/CourseStudy_.js

395 lines
18 KiB
JavaScript
Raw Normal View History

2025-02-20 15:41:53 +08:00
$(function () {
//界面初始化
window.loyout.load();
});
//布局
(function () {
var loyout = {
//是否视频全屏,即章节列表是否折叠
fullScreen: false,
load: function () {
this.init();
this.event();
},
//初始化页面布局
init: function () {
$("#MainBox").height($(window).height());
//设置视频播放高度
var hg = $(window).height() - $("#mainTop").height() - $("#playerInfo").height();
$("#videobox").height(hg - 70);
//中间分隔线的高度设置
$("#median").height($(window).height()).find("span").width($("#median").width()+2);
//章节区域高度设置
$(".itemList").height($(window).height() - $(".boxBar").height() - 30);
//习题的高度
$("#Exercises").height($(window).height() - $(".mainTop").height());
//
if (loyout.fullScreen) {
$("#MainBox,#videobox").width($(window).width() * 0.99);
$("#outlineBox,.itemList").width($(window).width() * 0.1);
} else {
$("#MainBox,#videobox").width($(window).width() * 0.79);
$("#outlineBox,.itemList").width($(window).width() * 0.19);
}
//内容区的大小
$("#details").height($("#MainBox").height() - $(".mainTop").height() - 20);
//当前章节高亮显示
$(".outline .olitem").each(function () {
var id = $("body").attr("olid");
var olid = $(this).attr("olid");
if (id == olid) $(this).addClass("current");
if (id == "") $(".outline .olitem:eq(0)").addClass("current");
});
//是否有视频
$(".olitem").each(function () {
var isvideo=$(this).attr("isvideo");
if(isvideo=="True")$(this).addClass("li-video");
});
},
//事件
event: function () {
//分隔栏事件
$("#median").click(function () {
if (!window.loyout.fullScreen) {
$("#outlineBox").animate({ width: 100 }, 500, function () { $(this).hide(); });
$("#MainBox,#videobox").animate({ width: $(window).width() * 0.99 }, 500);
$("#btnClose, #btnOpen").toggle();
} else {
$("#MainBox, #videobox").animate({ width: $(window).width() * 0.79 }, 500);
$("#outlineBox").animate({ width: $(window).width() * 0.2 }, 300, function () { $(this).slideDown(200); });
$("#btnClose, #btnOpen").toggle();
}
window.loyout.fullScreen = !window.loyout.fullScreen;
});
//知识库的按钮
$("#btnKnowledge").click(function(){
new top.PageBox('课程知识库','Knowledges.ashx?couid='+$().getPara("couid"),100,100,null,window.name).Open();
return false;
});
//设置标题栏的事件
(function setInitTilte() {
//取当前状态值
var stateCurr = $().getPara("state");
//当前标题栏
var currtit = $("a.titBox:first");
if (stateCurr != "") {
$("a.titBox").each(function (index, element) {
var href = $(this).attr("href");
var rs = new RegExp("(^|)state=([^\&]*)(\&|$)", "gi").exec(href), tmp;
var state = 0;
if (tmp = rs) state = tmp[2];
if (stateCurr == state) currtit = $(this);
}).removeClass("titCurr");
}
currtit.addClass("titCurr");
try {
var func = eval("setInit_" + state);
if ("undefined" != typeof (func) && func != null) func();
} catch (e) { }
})();
}
};
window.loyout = loyout;
$(window).resize(function () {
window.loyout.init();
});
})();
//习题界面的初始化
function setInit_4() {
var frame = $("#Exercises");
frame.height($(window).height() - $(".mainTop").height());
}
//如果你不需要某项设置可以直接删除注意var flashvars的最后一个值后面不能有逗号
function loadedHandler() {
//上次播放进度
var history = $().cookie("outlineVideo_" + $().getPara('olid'));
$("#historyTime").text(history);
if (history == null) $(".historyInfo").hide();
if (CKobject.getObjectById('ckplayer_videobox').getType()) {//说明使用html5播放器
//CKobject.getObjectById('ckplayer_videobox').addListener('paused', pausedHandler);
//alert(CKobject.getObjectById('ckplayer_videobox').innerHTML);
//CKobject.getObjectById('ckplayer_videobox').addListener('time', timeHandler);
CKobject.getObjectById('ckplayer_videobox').addListener('play', function (b) {
//setT = window.setInterval(setIntervalFunction, 1000);
});
CKobject.getObjectById('ckplayer_videobox').addListener('pause', function (b) {
//if (setT != null) window.clearInterval(setT);
});
CKobject.getObjectById('ckplayer_videobox').addListener('time', timeHandler);
}
else {
CKobject.getObjectById('ckplayer_videobox').addListener('paused', 'pausedHandler');
CKobject.getObjectById('ckplayer_videobox').addListener('time', 'timeHandler');
}
}
/*当窗体失去焦点就停止播放,得到焦点继续播放,如果失去焦点前已经暂停,则保持原状态*/
$(window).blur(function () {
try {
CKobject.getObjectById('ckplayer_videobox').videoPause();
} catch (e) { }
});
$(window).focus(function () {
//CKobject.getObjectById('ckplayer_videobox').videoPlay();
//如果视频事件的弹窗存在,则不做其它动作。
if (MsgBox.IsExist) return;
try {
var id = $().getPara('olid');
CKobject.getObjectById('ckplayer_videobox').videoSeek(Number($().cookie("outlineVideo_" + id)));
} catch (e) { }
});
/* 获取观看的累计时间,单位:秒 */
var watchTime = Number($("#studyTime").attr("num"));
watchTime = isNaN(watchTime) ? 0 : watchTime;
//历史递交记录
var totalTime=Number($("#totalTime").text());
var p = Math.floor(watchTime / totalTime * 10000) / 100;
var historyLog = isNaN(p)|| p==Number.POSITIVE_INFINITY ? 0 : p;
//var setT = null;
function pausedHandler(b) {
//if (setT) window.clearInterval(setT);
//if (!b) setT = window.setInterval(setIntervalFunction, 1000);
}
//获取视频总时长
function getTotal() {
//获取视频时长
var dura = CKobject._K_('totalTime').innerHTML;
if (Number(dura) < 1) {
var a = CKobject.getObjectById('ckplayer_videobox').getStatus();
var total = '';
for (var k in a) {
if (k == 'totalTime') total = a[k];
}
CKobject._K_('totalTime').innerHTML = total;
}
return Number(dura);
}
function setIntervalFunction() {
//设置学习时间数值显示
CKobject._K_('studyTime').innerHTML = Math.floor(watchTime);
var total = getTotal(); //总时长
//提交数据
//完成度的百分比
var percent = Math.floor(Number($("#per").text()));
var interval = 2; //间隔百分比多少递交一次记录
if (Number(total) <= 5 * 60) interval = 10; //5分钟内
else if (Number(total) <= 10 * 60) interval = 5;
if (percent % interval == 0 && (percent > 0 && percent <= 100) && percent > Math.floor(historyLog)) {
historyLog += interval;
$.ajax({
url: "/Ajax/StudentStudy.ashx",
data: { couid: couid, olid: olid, studyTime: watchTime,
playTime: Number($("#playTime").text().trim()) * 1000,
totalTime: Number($("#totalTime").text().trim()) * 1000
},
success: function (data) {
var d = Number(data);
var show = $(".StudentStudyLog");
if (d > 0) show.text("学习进度(" + d + "%)提交成功!").removeClass("error");
if (d == -1) show.text("学员未登录,或登录失效").addClass("error");
show.show(1000, function () {
window.setTimeout(function () {
$(".StudentStudyLog").hide(500);
}, 3000);
});
},
error: function (e) {
var ex=e.responseText;
$(".StudentStudyLog").text("学习进度保存失败! 稍后会再次提交..").addClass("error").show(1000, function () {
window.setTimeout(function () {
$(".StudentStudyLog").hide(500);
}, 5000);
});
}
});
}
}
function timeHandler(t) {
//播放进度
if (t > -1) {
var history = Number($.trim($("#playTime").text()));
var time = Math.floor(t);
if (history != time) {
$("#playTime").text(time);
activeEvent(time); //触发播放事件
watchTime++; //观看时间加-
//完成度的百分比
var p = Math.floor(watchTime / Number($("#totalTime").text()) * 10000) / 100;
$("#per").text(p);
setIntervalFunction(); //向服务器提交学习记录
//记录本地播放进度
var id = $().getPara('id');
$().cookie("outlineVideo_" + id, time);
}
}
}
//加载视频播放器
var flashvars = {
f: videoPath, //视频地址
a: '', //调用时的参数只有当s>0的时候有效
s: '0', //调用方式0=普通方法f=视频地址1=网址形式,2=xml形式3=swf形式(s>0时f=网址配合a来完成对地址的组装)
c: '0', //是否读取文本配置,0不是1是
x: '', //调用配置文件路径只有在c=1时使用。默认为空调用的是ckplayer.xml
//i:'http://www.ckplayer.com/images/loadimg3.jpg',//初始图片地址
//d:'http://www.ckplayer.com/down/pause6.1_1.swf|http://www.ckplayer.com/down/pause6.1_2.swf',//暂停时播放的广告swf/图片,多个用竖线隔开,图片要加链接地址,没有的时候留空就行
u: '', //暂停时如果是图片的话,加个链接地址
//l:'http://www.ckplayer.com/down/adv6.1_1.swf|http://www.ckplayer.com/down/adv6.1_2.swf',//前置广告swf/图片/视频,多个用竖线隔开,图片和视频要加链接地址
r: '', //前置广告的链接地址,多个用竖线隔开,没有的留空
t: '10|10', //视频开始前播放swf/图片时的时间,多个用竖线隔开
y: '', //这里是使用网址形式调用广告地址时使用前提是要设置l的值为空
z: 'down/buffer.swf', //缓冲广告只能放一个swf格式
e: '0', //视频结束后的动作0是调用js函数1是循环播放2是暂停播放并且不调用广告3是调用视频推荐列表的插件4是清除视频流并调用js功能和1差不多5是暂停播放并且调用暂停广告
v: '80', //默认音量0-100之间
p: '1', //视频默认0是暂停1是播放2是不加载视频
h: '0', //播放http视频流时采用何种拖动方法=0不使用任意拖动=1是使用按关键帧=2是按时间点=3是自动判断按什么(如果视频格式是.mp4就按关键帧.flv就按关键时间)=4也是自动判断(只要包含字符mp4就按mp4来只要包含字符flv就按flv来)
q: '', //视频流拖动时参考函数默认是start
m: '', //让该参数为一个链接地址时,单击播放器将跳转到该地址
o: '', //当p=2时可以设置视频的时间单位
w: '', //当p=2时可以设置视频的总字节数
g: '', //视频直接g秒开始播放
j: '', //跳过片尾功能j>0则从播放多少时间后跳到结束<0则总总时间-该值的绝对值时跳到结束
//k:'30|60',//提示点时间,如 30|60鼠标经过进度栏30秒60秒会提示n指定的相应的文字
//n:'这是提示点的功能如果不需要删除k和n的值|提示点测试60秒',//提示点文字跟k配合使用如 提示点1|提示点2
wh: '', //宽高比可以自己定义视频的宽高或宽高比如wh:'4:3',或wh:'1080:720'
lv: '0', //是否是直播流,=1则锁定进度栏
loaded: 'loadedHandler', //当播放器加载完成后发送该js函数loaded
//调用播放器的所有参数列表结束
//以下为自定义的播放器参数用来在插件里引用的
my_url: encodeURIComponent(window.location.href)//本页面地址
//调用自定义播放器参数结束
};
var params = { bgcolor: '#FFF', allowFullScreen: false, allowScriptAccess: 'always', wmode: 'transparent' }; //这里定义播放器的其它参数如背景色跟flashvars中的b不同是否支持全屏是否支持交互
var video = [playMp4("undefined" != typeof videoPath ? videoPath : "") + '->video/mp4'];
if ($("#videobox").size() > 0) {
//CKobject.embed('/Utility/Ckplayer/ckplayer/ckplayer.swf', 'videobox', 'ckplayer_videobox', '100%', '100%', false, flashvars, video, params);
CKobject.embedHTML5('videobox', 'ckplayer_videobox', '100%', '100%', video, flashvars, ['all']);
}
//播放flv格式的同名mp4视频
function playMp4(vname) {
var vfile = vname;
if (!isOuter) { //如果是外部链接
//vname = window.BASE64.decoder(vname);
if (vname.indexOf('.' > -1)) {
var exist = vname.substring(vname.lastIndexOf('.') + 1);
if (exist != "aspx") {
vname = vname.substring(0, vname.lastIndexOf('.'));
vfile = vname + ".mp4";
}
}
$("#loadvideo").attr("href", vfile);
$("#loadvideo").attr("download", vfile);
} else {
$("#loadvideo").attr("href", vname);
$("#loadvideo").attr("download", vname);
}
return vfile;
}
/*
以上代码演示的兼容flash和html5环境的如果只调用flash播放器或只调用html5请看其它示例
*/
//开关灯
var box = new LightBox();
function closelights() {//关灯
box.Show();
CKobject._K_('videobox').style.width = '440px';
CKobject._K_('videobox').style.height = '550px';
CKobject.getObjectById('ckplayer_videobox').width = 680;
CKobject.getObjectById('ckplayer_videobox').height = 400;
}
function openlights() {//开灯
box.Close();
CKobject._K_('videobox').style.width = '680px';
CKobject._K_('videobox').style.height = '400px';
CKobject.getObjectById('ckplayer_videobox').width = 680;
CKobject.getObjectById('ckplayer_videobox').height = 400;
}
function playerstop() {
//只有当调用视频播放器时设置e=0或4时会有效果
//播放完成后自动跳转到下一节
var curr = $("div.itemList div.current");
var next = curr.next().next();
if (next.size() < 1) {
next = curr.parent().next(".olitem");
}
if (next.size() > 0) {
var a = next.find("a");
if (a.size() > 0) {
var href = a.attr("href");
window.location.href = href;
}
}
}
//跳转到历史学习点
$(function () {
$(".historyInfo").click(function () {
var history = $.trim($("#historyTime").text());
CKobject.getObjectById('ckplayer_videobox').videoSeek(history);
});
});
/*===========================================================================================
视频的播放事件
*/
MsgBox.OverEvent = function () {
CKobject.getObjectById('ckplayer_videobox').videoPlay();
};
//通过播放时间,激活视频事件
function activeEvent(time) {
//实际播放的时间值,单位秒
var s = Math.floor(Number(time));
//
$("#events .eventItem").each(function () {
var point = Number($(this).attr("point"));
if (point == s) {
//暂停播放
CKobject.getObjectById('ckplayer_videobox').videoPause();
//激出弹出窗口
var tit = $(this).find(".eventTitle").html();
var width = Number($(this).attr("winWidth"));
var height = Number($(this).attr("winHeight"));
var contx = $(this).find(".eventContext").html();
var type = Number($(this).attr("type"));
//如果是提醒或知识展示
if (type == 1 || type == 2) {
new MsgBox(tit, contx, width, height, "alert").Open();
}
//如果是试题
if (type == 3) {
new MsgBox(tit, $(this).html(), width, height, "null").Open();
$(".MsgBoxContext .eventTitle").remove();
$(".MsgBoxContext .quesBox .ansItem").click(function () {
if ($(this).attr("iscorrect") == "True") {
var quesAnd = $(".MsgBoxContext .quesAns");
quesAnd.hide();
quesAnd.html("&radic; 回答正确!");
quesAnd.css("color", "green");
quesAnd.show(100);
setTimeout("MsgBox.Close()", 1000);
} else {
var quesAnd = $(".MsgBoxContext .quesAns");
quesAnd.hide();
quesAnd.html("&times; 回答错误!");
quesAnd.css("color", "red");
quesAnd.show(100);
}
});
}
//如果是实时反馈
if (type == 4) {
new MsgBox(tit, $(this).html(), width, height, "null").Open();
$(".MsgBoxContext .eventTitle").remove();
$(".MsgBoxContext .quesBox .ansItem").click(function () {
var playPoint = Number($(this).attr("point"));
CKobject.getObjectById('ckplayer_videobox').videoSeek(playPoint);
MsgBox.Close(true);
});
}
}
});
}