Files
RGKT/rg-09112127/js/interactionVideo.js
2025-10-10 19:44:14 +08:00

220 lines
7.7 KiB
JavaScript

(function (win) {
// 初始化样式和方法
initClass();
})(window);
// classId 通过课程id拿配置信息
function getClassInfo(classId) {
if (
window &&
window.GLOBAL_CONFIG &&
window.GLOBAL_CONFIG.classObject
) {
// 从路由获取当前课程信息 courseHome.html?id=l01
const id = classId || window.location.search.replace("?id=", "") || "m2x04";
const type = {
l: "live",
c: "language",
m: "math",
};
let classInfo = window.GLOBAL_CONFIG.classObject[type[id[0]]][id]
// console.log("从路由获取当前课程信息 id classInfo", id, id[0], classInfo);
// 课程信息
return classInfo;
}
}
// 初始化课程
function initClass() {
let classInfo = getClassInfo();
if (classInfo && classInfo.courseVideo && classInfo.courseVideo.src) {
let mainVideoDom = document.getElementById("mainVideo");
mainVideoDom.src = classInfo.courseVideo.src;
mainVideoDom.dataset.id = classInfo.courseVideo.id;
mainVideoDom.load();
mainVideoDom.play();
// 开始跟踪课程访问
const courseId = window.location.search.replace("?id=", "") || "m2x04";
if (window.trackCourseAccess) {
window.trackCourseAccess(courseId);
}
}
}
// 点击目录选择课程
function sectionClick(event) {
if (
event &&
event.target &&
event.target.dataset &&
event.target.dataset.info
) {
stopVideo();
const info = JSON.parse(event.target.dataset.info);
// console.log("sectionClick", event, info);
if (info.classId !== window.location.search.replace("?id=", "")) {
window.open(`./courseHome.html?id=${info.classId}`, "_self");
}
let classInfo = getClassInfo();
let mainPlayDom = document.getElementsByClassName("box-play")[0];
// 主课程
if (info.type == "course") {
mainPlayDom.style.display = "none";
let mainVideoDom = document.getElementById("mainVideo");
mainVideoDom.src = classInfo.courseVideo.src;
mainVideoDom.dataset.id = classInfo.courseVideo.id;
mainVideoDom.load();
mainVideoDom.play();
// 开始跟踪课程访问
if (window.trackCourseAccess) {
window.trackCourseAccess(info.classId);
}
} else if (info.type == "video") {
mainPlayDom.style.display = "none";
let vid = info.videosId;
let mainVideoDom = document.getElementById("mainVideo");
mainVideoDom.src = classInfo.task.videos[vid].src;
mainVideoDom.dataset.id = classInfo.task.videos[vid].id;
mainVideoDom.load();
mainVideoDom.play();
// 开始跟踪视频访问
if (window.trackVideoAccess) {
window.trackVideoAccess(info.classId, vid);
}
// 设置监听函数
mainVideoDom.addEventListener("ended", () => {
logicManage(mainVideoDom)
});
} else if (info.type == "play") {
mainPlayDom.style.display = "block";
let mainPlay = document.getElementById("mainPlay");
mainPlay.src = info.url;
// 开始跟踪游戏访问
if (window.trackGameAccess) {
window.trackGameAccess(info.classId);
}
}
}
}
// 通知播放视频
function stopVideo() {
let mainVideoDom = document.getElementById("mainVideo");
mainVideoDom.pause();
// 控制按钮展示
const buttonDom = document.getElementsByClassName('box-btn')[0];
buttonDom.style.display = 'none';
let certificateDom = document.querySelector('.box-certificate');
certificateDom.style.display = "none";
// 结束访问跟踪
if (window.endAccess) {
window.endAccess();
}
}
// 视频播放结束、按钮点击后都调用此方法
function logicManage(event) {
// 获取区分dom 和 对象
let dom = null;
if (event.dataset) {
dom = event;
} else if (event.target) {
dom = event.target;
}
// console.log("logicManage", event, event.dataset, event.target, dom.dataset);
let classInfo = getClassInfo();
// 触发事件的是视频
if (dom.dataset.id.indexOf("v") == 0) {
// 找到当前视频id
let videoInfo = classInfo.task.videos[dom.dataset.id];
let nextId = videoInfo.nextId;
if (nextId && nextId.indexOf("b") == 0) {
// id包含b 下一步是显示按钮
const buttonInfo = classInfo.task.buttons[nextId];
const buttonDomList = document.getElementsByTagName('button');
buttonInfo.btn.map((value, index) => {
buttonDomList[index].innerText = value.text;
// 给dom自定义属于赋值
buttonDomList[index].dataset.id = value.id;
});
// 展示问题
const buttonTitleDom = document.getElementsByClassName('box-btn-question')[0];
buttonTitleDom.innerText = buttonInfo.question;
// 控制按钮展示
const buttonDom = document.getElementsByClassName('box-btn')[0];
buttonDom.style.display = 'flex';
}
else if (nextId && nextId.indexOf("n") == 0) {
let noticeDom = document.getElementsByClassName("box-notice")[0];
let noticeTextDom = document.getElementsByClassName("box-notice-text")[0];
noticeDom.style.display = 'block';
noticeDom.dataset.id = classInfo.task.notices[nextId].id;
noticeTextDom.innerText = classInfo.task.notices[nextId].text;
// 设置定时器 提示语只展示三秒,三秒后关闭,执行下一步
let timer = setTimeout(() => {
noticeDom.style.display = 'none';
// 清除定时器
clearTimeout(timer);
}, 3000);
}
else if (nextId && nextId.indexOf("v") == 0) {
// id包含v 下一步是播放视频
let mainVideoDom = document.getElementById("mainVideo");
mainVideoDom.src = classInfo.task.videos[nextId].src;
// 给dom自定义属于赋值
mainVideoDom.dataset.id = classInfo.task.videos[nextId].id;
mainVideoDom.load();
mainVideoDom.play();
}
}
// 触发事件的是按钮
else if (dom.dataset.id.indexOf("b") == 0) {
// 首先得切割id 知道是点击左边 还是右边的
let buttonId = dom.dataset.id.split("-")[0];
let buttonLorR = dom.dataset.id.split("-")[1];
let buttonInfo = classInfo.task.buttons[buttonId];
let nextId = null;
// 循环判断,看看点击的是左边还是右边的按钮
buttonInfo.btn.map((value, index) => {
if (value.id == dom.dataset.id) {
nextId = value.nextId;
}
});
console.log("点击的是左边还是右边的按钮 下一步", nextId);
if (nextId && nextId.indexOf("v") == 0) {
// id包含v 下一步是播放视频
let mainVideoDom = document.getElementById("mainVideo");
mainVideoDom.src = classInfo.task.videos[nextId].src;
// 给dom自定义属于赋值
mainVideoDom.dataset.id = classInfo.task.videos[nextId].id;
mainVideoDom.load();
mainVideoDom.play();
}
// 控制按钮展示
const buttonDom = document.getElementsByClassName('box-btn')[0];
buttonDom.style.display = 'none';
}
}