ZhiYeJianKang_PeiXun/Song.Site/Templates/Web/_Public/Scripts/CourseStudy_.js
2025-02-20 15:41:53 +08:00

395 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$(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);
});
}
}
});
}