tasklib_book.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954
  1. //播放音频图片地址
  2. var PicInfo1 = {
  3. answerPointImgUrl: "file:///android_asset/js/update-answer.png",
  4. yaoshiShowImgUrl: "file:///android_asset/js/yaoshi-show.png",
  5. yaoshiHideImgUrl: "file:///android_asset/js/yaoshi-hide.png",
  6. recordPlayImgUrl: "file:///android_asset/js/play.png",
  7. recordPauseImgUrl: "file:///android_asset/js/pause.png",
  8. audioPlayImgUrl: "file:///android_asset/js/dynaiselaba.gif",
  9. audioPauseImgUrl: "file:///android_asset/js/dynaiselaba.png"
  10. }
  11. //本地调用用的资源
  12. var PicInfo = {
  13. answerPointImgUrl: "../Images/update-answer.png",
  14. yaoshiShowImgUrl: "../Images/yaoshi-show.png",
  15. yaoshiHideImgUrl: "../Images/yaoshi-hide.png",
  16. KouYuTagImgUrl: "../Images/KY.png",
  17. recordPlayImgUrl: "../Images/play.png",
  18. recordPauseImgUrl: "../Images/pause.png",
  19. audioPlayImgUrl: "../Images/dynaiselaba.gif",
  20. audioPauseImgUrl: "../Images/dynaiselaba.png"
  21. }
  22. //显示、隐藏答案
  23. function showHideAnswer(flag) {
  24. if (flag) {
  25. //$(".underlineContent").show();
  26. $(".underlineContent").css("color", "#92D050");
  27. $(".yaoshi").attr("src", PicInfo.yaoshiShowImgUrl);
  28. }
  29. else {
  30. //$(".underlineContent").hide();
  31. $(".underlineContent").css("color", "#ffffff");
  32. $(".yaoshi").attr("src", PicInfo.yaoshiHideImgUrl);
  33. }
  34. }
  35. ///显示、隐藏钥匙及答案 isShowYX:显示和隐藏钥匙,isShowAS:显示和隐藏答案
  36. function showHideAnswerEx(isShowYX, isShowAS) {
  37. if (isShowYX) {
  38. $(".yaoshi").show();
  39. }
  40. else {
  41. $(".yaoshi").hide();
  42. }
  43. if (isShowAS) {
  44. $.each($(".underlineContent"), function (index, item) {
  45. //$(item).html($(item).attr("data-text"));
  46. if (!$(item).hasClass("no-answer")) {
  47. $(item).css("color", "#92D050");
  48. }
  49. else {
  50. $(item).css("color", "#989898");
  51. }
  52. $(item).find(".wordStyle").css("color", "#db5d00");
  53. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  54. });
  55. $(".yaoshi").attr("data-status", "1");
  56. $(".yaoshi").attr("src", PicInfo.yaoshiShowImgUrl);
  57. }
  58. else {
  59. $.each($(".underlineContent,.underlineContent.no-answer"), function (index, item) {
  60. $(item).css("color", "#ffffff");
  61. $(item).find(".wordStyle").css("color", "#ffffff");
  62. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  63. });
  64. $(".yaoshi").attr("data-status", "0");
  65. $(".yaoshi").attr("src", PicInfo.yaoshiHideImgUrl);
  66. }
  67. }
  68. //页面加载完,原文 绑定事件
  69. function bindEventTeaOrignalYS() {
  70. var bodyWidth = $(document.body).width();
  71. //显示/隐藏习题答案
  72. $(".yaoshi").on("click", function () {
  73. var curDisplay = $(this).nextUntil(".yaoshi").find(".underlineContent").eq(0).css("display");
  74. if (curDisplay == "undefined" || curDisplay == undefined) return;
  75. if (curDisplay == "none" || $(this).attr("data-status") == "0") {
  76. $(this).attr("data-status", "1");
  77. $(this).attr("src", PicInfo.yaoshiShowImgUrl);
  78. //$(this).nextUntil(".yaoshi").find(".underlineContent").show();
  79. //$(this).nextUntil(".yaoshi").find(".underlineContent").css("color", "#92D050");
  80. $.each($(this).nextUntil(".yaoshi").find(".underlineContent"), function (index, item) {
  81. if (!$(item).hasClass("no-answer")) {
  82. $(item).css("color", "#92D050");
  83. }
  84. else {
  85. $(item).css("color", "#989898");
  86. }
  87. $(item).find(".wordStyle").css("color", "#db5d00");
  88. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  89. });
  90. //不再存在已隐藏的钥匙,移动端回调
  91. if ($(".yaoshi[data-status='0']").length == 0) {
  92. //添加回调
  93. console.log("全部显示了");
  94. }
  95. } else {
  96. $(this).attr("data-status", "0");
  97. $(this).attr("src", PicInfo.yaoshiHideImgUrl);
  98. //$(this).nextUntil(".yaoshi").find(".underlineContent").hide();
  99. //$(this).nextUntil(".yaoshi").find(".underlineContent").css("color", "#ffffff");
  100. $.each($(this).nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  101. $(item).css("color", "#ffffff");
  102. $(item).find(".wordStyle").css("color", "#ffffff");
  103. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  104. });
  105. //添加回调
  106. onClickKeyHide();
  107. }
  108. });
  109. //处理答题点
  110. $.each($(".underlineContent"), function (index, item) {
  111. $(item).attr("data-text", $(item).html());
  112. });
  113. //给音频绑定一个ID
  114. $.each($(".audioImg"), function (index, item) {
  115. $(item).attr("audiourl", "");
  116. $(item).attr('audio-id', index);
  117. });
  118. //给视频图标处理
  119. $.each($(".videoImg"), function (index, item) {
  120. $(item).attr("audiourl", "");
  121. });
  122. //给口语图标处理
  123. $.each($(".oralLanguageImg"), function (index, item) {
  124. $(item).attr("audiourl", "");
  125. });
  126. //去除多余的U空标签
  127. $.each($("u"), function (index, item) {
  128. var text = $(item).text();
  129. text = text.replace(/\s+/g, "");
  130. if (text == "") {
  131. $(item).remove();
  132. }
  133. });
  134. //处理暂无参考答案
  135. $.each($(".yaoshi"), function (index, item) {
  136. var prev = $(item).nextUntil(".yaoshi").find(".underlineContent");
  137. if (prev.length == 0) {
  138. var spanHtml = document.createElement("span");
  139. //添加子节点
  140. var uHtml = document.createElement("u");
  141. uHtml.className = "underlineContent no-answer";
  142. uHtml.innerText = "暂无参考答案";
  143. uHtml.setAttribute("data-text", uHtml.innerText);
  144. $(spanHtml).html(uHtml.outerHTML);
  145. $(item).after(spanHtml);
  146. }
  147. });
  148. //处理表格宽度
  149. $.each($(".wordTable"), function (index, item) {
  150. $(item).css("width", bodyWidth + "px");
  151. });
  152. //点击喇叭事件,音频播放
  153. $(".audioImg").on("click", function () {
  154. audioPlayClick(this);
  155. });
  156. //点击播放事件,视频播放
  157. $(".videoImg").on("click", function () {
  158. var curHtml = $(this).parent().find(".videoUrl").html();
  159. var curAlt = $(this).attr("alt");//播放视频地址
  160. playVisiableAudioCallBack(2, $(this).attr("alt"));
  161. });
  162. //处理表格样式
  163. $("td").attr("style", "");
  164. }
  165. //页面加载完,课件 绑定事件
  166. function bindEventYS() {
  167. var bodyWidth = $(document.body).width();
  168. //不存在underline 属性下有内容,所以全部隐藏,若有就是源头数据有问题
  169. $('.underline').css("display", "none");
  170. //给每个答题点加上ID
  171. var headid = -1;//基序号
  172. $.each($(".yaoshi"), function (index, item) {
  173. $(item).attr('answer-id', index);
  174. //如果是打勾题、或纠错题,加上辅助头ID
  175. var parent = $(item).parent();
  176. if ($(parent).hasClass('correntQue') || $(parent).hasClass('boxQue')) {
  177. if(headid != -1) {
  178. var gid = $(parent).attr('class').replace(/.*group(\d+).*/g, "$1");//相当于偏移序号
  179. $(item).attr('parent-anid', headid +Number(gid) -1);
  180. }
  181. else {
  182. headid = index;
  183. $(item).attr('parent-anid', headid);
  184. }
  185. }
  186. else {
  187. headid = - 1;
  188. }
  189. });
  190. //给音频绑定一个ID
  191. $.each($(".audioImg"), function (index, item) {
  192. $(item).attr("audiourl", "");
  193. $(item).attr('audio-id', index);
  194. });
  195. //给视频图标处理
  196. $.each($(".videoImg"), function (index, item) {
  197. $(item).attr("audiourl", "");
  198. });
  199. //给口语图标处理
  200. $.each($(".oralLanguageImg"), function (index, item) {
  201. $(item).attr("audiourl", "");
  202. });
  203. //去除多余的U空标签
  204. $.each($("u"), function (index, item) {
  205. var text = $(item).text();
  206. text = text.replace(/\s+/g, "");
  207. if (text == "") {
  208. $(item).remove();
  209. }
  210. });
  211. //处理暂无参考答案
  212. $.each($(".yaoshi"), function (index, item) {
  213. var parent = $(item).parent();
  214. var prev = $(item).nextAll(".underlineContent");
  215. if (prev.length == 0) {
  216. var uHtml = document.createElement("u");
  217. uHtml.className = "underlineContent no-answer";
  218. uHtml.innerText = "暂无参考答案";
  219. if ($(parent)[0].tagName == 'P') {
  220. if ($(parent).hasClass('correntQue') || $(parent).hasClass('boxQue')) {
  221. uHtml.innerHTML = "     ";
  222. }
  223. }
  224. uHtml.setAttribute("data-text", uHtml.innerText);
  225. $(item).after(uHtml);
  226. }
  227. });
  228. //处理表格宽度
  229. $.each($(".wordTable"), function (index, item) {
  230. $(item).css("width", bodyWidth + "px");
  231. });
  232. //获取两个之间的答题点
  233. var index = 1;
  234. var checkId = 0;
  235. $.each($(".multipleStart").nextUntil(".multipleEnd").filter("[class*='group']"), function (index, item) {
  236. checkId = $(item).find('.yaoshi').attr("answer-id");
  237. var index = $(item).attr('class').replace(/.*group(\d+).*/g, "$1");
  238. var ischecked = $(item).find(".underlineContent").text().indexOf("√") > -1;
  239. //勾选题
  240. if ($(item).hasClass('boxQue')) {
  241. $(item).find('.yaoshi').after("<div class='checkbox'><input id=" + checkId + " type='checkbox' onclick=this.checked=!this.checked><label for=" + checkId + "></label></div>");
  242. $(item).find('input').prop('checked', ischecked);
  243. $(item).find('.underlineContent').hide();
  244. }
  245. });
  246. //显示/隐藏习题答案
  247. $(".yaoshi").on("click", function () {
  248. var ParentAnid = $(this).attr("parent-anid");
  249. if ($(this).attr("data-status") == "0") {
  250. if (ParentAnid != undefined) {
  251. $.each($(this).parents().find(".yaoshi[parent-anid='" + ParentAnid + "']"), function (index, FItem) {
  252. $(FItem).attr("data-status", "1");
  253. $(FItem).attr("src", PicInfo.yaoshiShowImgUrl);
  254. $.each($(FItem).next().find(".underlineContent"), function (index, item) {
  255. if (!$(item).hasClass("no-answer")) {
  256. $(item).css("color", "#92D050");
  257. }
  258. else {
  259. $(item).css("color", "#989898");
  260. }
  261. $(item).find(".wordStyle").css("color", "#db5d00");
  262. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  263. });
  264. });
  265. }
  266. else{
  267. $(this).attr("data-status", "1");
  268. $(this).attr("src", PicInfo.yaoshiShowImgUrl);
  269. //$(this).nextUntil(".yaoshi").filter(".underlineContent").css("color", "#92D050");
  270. $.each($(this).nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  271. if (!$(item).hasClass("no-answer")) {
  272. $(item).css("color", "#92D050");
  273. }
  274. else {
  275. $(item).css("color", "#989898");
  276. }
  277. $(item).find(".wordStyle").css("color", "#db5d00");
  278. $(item).find(".phraseStyle").css("background-color", "#f2db8b");
  279. });
  280. }
  281. //不再存在已隐藏的钥匙,移动端回调
  282. if ($(".yaoshi[data-status='0']").length == 0) {
  283. //添加回调
  284. console.log("全部显示了");
  285. }
  286. }
  287. else {
  288. if (ParentAnid != undefined) {
  289. $.each($(this).parents().find(".yaoshi[parent-anid='" + ParentAnid + "']"), function (index, FItem) {
  290. $(FItem).attr("data-status", "0");
  291. $(FItem).attr("src", PicInfo.yaoshiHideImgUrl);
  292. $.each($(FItem).next().find(".underlineContent"), function (index, item) {
  293. $(item).css("color", "#ffffff");
  294. $(item).find(".wordStyle").css("color", "#ffffff");
  295. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  296. });
  297. });
  298. }
  299. else {
  300. $(this).attr("data-status", "0");
  301. $(this).attr("src", PicInfo.yaoshiHideImgUrl);
  302. //$(this).nextUntil(".yaoshi").filter(".underlineContent").css("color", "#ffffff");
  303. $.each($(this).nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  304. $(item).css("color", "#ffffff");
  305. $(item).find(".wordStyle").css("color", "#ffffff");
  306. $(item).find(".phraseStyle").css("background-color", "#ffffff");
  307. });
  308. }
  309. //添加回调
  310. onClickKeyHide();
  311. }
  312. });
  313. //点击喇叭事件,音频播放
  314. $(".audioImg").on("click", function () {
  315. audioPlayClick(this);
  316. });
  317. //点击播放事件,视频播放
  318. $(".videoImg").on("click", function () {
  319. $(this).attr("audiourl", "");
  320. var curHtml = $(this).parent().find(".videoUrl").html();
  321. var curAlt = $(this).attr("alt");//播放视频地址
  322. playVisiableAudioCallBack(2, $(this).attr("alt"));
  323. });
  324. //处理表格样式
  325. $("td").attr("style", "");
  326. }
  327. // 过滤规则
  328. var FRules = function(DataStr) {
  329. return DataStr.indexOf("") > - 1;
  330. };
  331. //学生端 处理作答区域
  332. var answerData = new Array();
  333. function handleAnswerRange() {
  334. //规范文本格式
  335. var answerId = "";
  336. var tempJson = new Array();
  337. //所有underline不做处理
  338. $.each($(".yaoshi").nextUntil(".yaoshi").filter(".underline"), function (index, item) {
  339. tempId = $(item).prevAll(".yaoshi").attr("answer-id");
  340. //记录上一次的ID
  341. if (tempId == undefined) {
  342. tempId = answerId;
  343. }
  344. else {
  345. answerId = tempId;
  346. }
  347. var prev = $(item).prev();
  348. if ((prev.length == 0 || $(prev).attr("class") != "tag-span") && $(prev).attr("class") != "underlineContent") {
  349. if ($("span[answer-id='" + tempId + "']").length == 0) {
  350. $(item).prop("outerHTML", "<span answer-id='" + tempId + "' class='tag-span' answer-isky='0'>_</span>");
  351. }
  352. }
  353. $(item).remove();
  354. });
  355. //提取参考答案并规范文本格式
  356. answerId = "";
  357. $.each($(".yaoshi").nextUntil(".yaoshi").filter(".underlineContent"), function (index, item) {
  358. var info = new Object();
  359. info.Id = $(item).prevAll(".yaoshi").attr("answer-id");
  360. //记录上一次的ID
  361. if (info.Id == undefined) {
  362. info.Id = answerId;
  363. }
  364. else {
  365. answerId = info.Id;
  366. }
  367. info.AnsText = $(item).text();
  368. tempJson.push(info);
  369. var prev = $(item).prev();
  370. if (prev.length == 0 || $(prev).attr("class") != "tag-span") {
  371. //替换答案
  372. $(item).prop("outerHTML", "<span answer-id='" + info.Id + "' class='tag-span' answer-isky='0'>_</span>");
  373. }
  374. else {
  375. $(item).remove();
  376. }
  377. });
  378. //补充空钥匙的处理
  379. $.each($(".yaoshi"), function (index, item) {
  380. var Id = $(item).attr("answer-id");
  381. var prev = $(item).next();
  382. if (prev.length == 0 || $(prev).attr("class") != "tag-span") {
  383. if ($("span[answer-id='" + Id + "']").length == 0) {
  384. var uHtml = document.createElement("span");
  385. uHtml.className = "tag-span";
  386. uHtml.innerText = "_";
  387. uHtml.setAttribute("answer-id", Id);
  388. $(item).after(uHtml);
  389. }
  390. }
  391. });
  392. //处理口语试题
  393. $.each($(".oralLanguage").nextUntil(".oralLanguageDone"), function (num, part) {
  394. if (part.tagName != "p") {
  395. $.each($(part).find(".tag-span"), function (index, item) {
  396. $(item).attr("answer-isky", "1");
  397. });
  398. }
  399. else {
  400. if ($(part).hasClass("underlinePart")) {
  401. $.each($(part).find(".tag-span"), function (index, item) {
  402. $(item).attr("answer-isky", "1");
  403. });
  404. }
  405. }
  406. });
  407. //合并参考答案数据
  408. var tempid = "";
  409. var temptext = "";
  410. for (var i = 0; i < tempJson.length; i++) {
  411. if (tempid == tempJson[i].Id) {
  412. temptext = temptext + tempJson[i].AnsText;
  413. }
  414. else {
  415. if (tempid != "") {
  416. var info = new Object();
  417. info.Id = tempid;
  418. info.AnsText = temptext;
  419. answerData.push(info);
  420. //重置
  421. tempid = "";
  422. temptext = "";
  423. }
  424. tempid = tempJson[i].Id;
  425. temptext = tempJson[i].AnsText;
  426. //最后一个存入
  427. if (i == tempJson.length - 1) {
  428. var info = new Object();
  429. info.Id = tempid;
  430. info.AnsText = temptext;
  431. answerData.push(info);
  432. }
  433. }
  434. }
  435. //补全答题点
  436. var Num = 0;
  437. if (answerData.length > 0) {
  438. //Num = Number.parseInt(answerData[answerData.length - 1].Id);
  439. Num = Number.parseInt($(".yaoshi:last").attr('answer-id'));
  440. for (var i = 0; i < Num + 1; i++) {
  441. if (i < answerData.length) {
  442. var index = Number(answerData[i].Id) - i;
  443. for (var j = 0; j < index; j++) {
  444. var info = new Object();
  445. info.Id = (i + j).toString();
  446. info.AnsText = "";
  447. answerData.splice(i, 0, info);
  448. }
  449. }
  450. else {
  451. var info = new Object();
  452. info.Id = (i).toString();
  453. info.AnsText = "";
  454. answerData.splice(i, 0, info);
  455. }
  456. }
  457. }
  458. //获取两个之间的答题点
  459. var index = 1;
  460. var checkId = 0;
  461. $.each($(".multipleStart").nextUntil(".multipleEnd").filter("[class*='group']"), function (index, item) {
  462. checkId = $(item).find('.yaoshi').attr("answer-id") ;
  463. var index = $(item).attr('class').replace(/.*group(\d+).*/g, "$1");
  464. var ischecked = $(item).find(".underlineContent").text().indexOf("√") > -1;
  465. //勾选题
  466. if ($(item).hasClass('boxQue')) {
  467. $(item).find('.yaoshi').after("<div class='checkbox'><input id=" + checkId + " type='checkbox' onclick=this.checked=!this.checked><label for=" + checkId + "></label></div>");
  468. $(item).find('input').prop('checked', ischecked);
  469. $(item).find('.underlineContent').hide();
  470. }
  471. });
  472. //添加答题点的点击UI及交互
  473. $.each($(".tag-span"), function (index, item) {
  474. var answerText = "";
  475. var isky = $(item).attr('answer-isky');
  476. var answerid = $(item).attr('answer-id');
  477. for (var i = 0; i < answerData.length; i++) {
  478. if (answerid == answerData[i].Id) {
  479. answerText = answerData[i].AnsText;
  480. break;
  481. }
  482. }
  483. $(item).prop("outerHTML", "<div class='answer-body' answer-id='" + answerid + "' answer-anstext='" + answerText + "' answer-isky='" + isky + "'><div class='answer-audio-range'><img src='" + PicInfo.recordPlayImgUrl + "'/><span class='answer-audio-text'>作答音频</span></div><div class='answer-point-range'><img src='" + PicInfo.answerPointImgUrl + "'/><span class='answer-point-text'>答题点</span></div><buttom class='answer-text'></buttom></div>");
  484. //删除钥匙节点
  485. var prev = $("img[answer-id='" + answerid + "']");
  486. if (prev.length > 0) {
  487. $(prev).remove();
  488. }
  489. });
  490. //添加点击事件
  491. $(".answer-body").on("click", function () {
  492. var curObj = new Object();
  493. curObj.Id = $(this).attr("answer-id");//答题点ID
  494. curObj.IsKY = $(this).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  495. curObj.Text = $(this).attr("answer-text");//用户作答内容
  496. curObj.Score = $(this).attr("answer-score");//作答评分
  497. curObj.AnsText = $(this).attr("answer-anstext");//参考答案
  498. curObj.Comment = $(this).attr("answer-comment");//评语
  499. $(".answer-body").removeClass("select-answer");
  500. $(this).addClass("select-answer");
  501. //已作答,弹出作答答案
  502. if ($(this).data("ans-status") == "1") {
  503. //移动端添加外部处理
  504. onClickAnswerPoint(JSON.stringify(curObj));
  505. }
  506. else {
  507. //移动端添加外部处理,弹出作答操作
  508. onClickAnswerPoint(JSON.stringify(curObj));
  509. }
  510. });
  511. //去除多余的空格横线
  512. $.each($(".underline"), function (index, item) {
  513. var text = $(item).text();
  514. text = text.replace(/\s+/g, "");
  515. if (text == "") {
  516. $(item).remove();
  517. }
  518. });
  519. return answerData;
  520. }
  521. //接收学生的作答
  522. function reviewAnswer(answerJson) {
  523. if (answerJson != "" && answerJson) {
  524. var answerObj = JSON.parse(answerJson);
  525. var selectElement = $(".answer-body[answer-id='" + answerObj.Id + "']");
  526. var audioElement = $(selectElement).children(".answer-audio-range").children("img").eq(0);
  527. answerObj.IsKY = $(selectElement).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  528. //是否为音频作答
  529. if ((answerObj.Type == 3 || answerObj.Type == 4) && answerObj.AudioUrl != "") {
  530. $(selectElement).children(".answer-point-range").hide();
  531. $(selectElement).children(".answer-audio-range").css("display", "inline-block");
  532. $(selectElement).children(".answer-audio-range").children("span").text("作答音频(" + answerObj.AudioLength + "s)");
  533. //填充作答内容
  534. $(selectElement).attr("answer-text", answerObj.Text);
  535. if (answerObj.Text != "") {
  536. answerObj.Text = "(" + answerObj.Text + ")";
  537. $(selectElement).children(".answer-text").show();
  538. $(selectElement).children(".answer-text").text(answerObj.Text);
  539. }
  540. //是否之前存在作答音频
  541. $(selectElement).attr("answer-url", answerObj.AudioUrl);
  542. $(audioElement).attr("src", PicInfo.recordPlayImgUrl);
  543. $(selectElement).children(".answer-audio-range").attr("play-status", "0");
  544. //独立绑定事件
  545. $(audioElement).on("click", function () {
  546. recordAudioClick(this, answerObj.Id, answerObj.AudioUrl);
  547. });
  548. $(selectElement).children(".answer-audio-range").children("span").on("click", function () {
  549. $(".answer-body").removeClass("select-answer");
  550. $(selectElement).addClass("select-answer");
  551. onClickAnswerPoint(JSON.stringify(answerObj));
  552. });
  553. }
  554. else {
  555. $(selectElement).attr("answer-text", answerObj.Text);//填充作答内容
  556. $(selectElement).children(".answer-audio-range").hide();
  557. if (answerObj.Text != "") {
  558. $(selectElement).children(".answer-text").show();
  559. $(selectElement).children(".answer-point-range").hide();
  560. $(selectElement).children(".answer-text").text(answerObj.Text);
  561. }
  562. else {
  563. $(selectElement).children(".answer-text").hide();
  564. $(selectElement).children(".answer-point-range").show();
  565. }
  566. }
  567. }
  568. }
  569. //提交,获取所有作答答案及参考答案
  570. function getAllAnswer() {
  571. //处理作答
  572. $.each($(".answer-body"), function (index, item) {
  573. var mytext = $(item).children(".answer-text").text();
  574. var curDisplay = $(item).children(".answer-audio-range").css("display");
  575. if (mytext == "" && curDisplay == "none") {
  576. mytext = "未作答";
  577. $(item).children(".answer-point-range").hide();
  578. $(item).children(".answer-text").show();
  579. $(item).children(".answer-text").text(mytext);
  580. $(item).children(".answer-text").addClass("no-answer");
  581. }
  582. });
  583. $(".answer-body").removeClass("select-answer");//移除样式
  584. $(".answer-body").unbind('click');//取消点击绑定事件
  585. $(".answer-body").children(".answer-audio-range").children("span").unbind('click');//取消点击绑定事件
  586. return answerData;
  587. }
  588. //回填所有答案,answerJson:所有作答及参考答案List,statusType:0-可作答,1-已提交,2-查看评阅
  589. function backupAllAnswer(answerJson, statusType) {
  590. if (answerJson != "" && answerJson) {
  591. var answerList = JSON.parse(answerJson);
  592. $.each($(".answer-body"), function (index, item) {
  593. //提交直接还原作答现场
  594. var mytext = answerList[index].Text;//我的答案
  595. answerList[index].IsKY = $(item).attr("answer-isky");//是否是口语试题,0-不是口语题,1-是口语题
  596. //添加音频控制
  597. var audioElement = $(item).children(".answer-audio-range").children("img").eq(0);
  598. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  599. $(item).children(".answer-point-range").hide();
  600. $(item).children(".answer-audio-range").css("display", "inline-block");
  601. $(item).children(".answer-audio-range").children("span").text("作答音频(" + answerList[index].AudioLength + "s)");
  602. //填充作答内容
  603. $(item).attr("answer-text", mytext);
  604. if (mytext != "") {
  605. mytext = "(" + mytext + ")";
  606. $(item).children(".answer-text").show();
  607. $(item).children(".answer-text").text(mytext);
  608. }
  609. //音频节点
  610. $(audioElement).attr("src", PicInfo.recordPlayImgUrl);
  611. $(item).attr("answer-url", answerList[index].AudioUrl);
  612. $(item).children(".answer-audio-range").attr("play-status", "0");
  613. //独立绑定事件
  614. $(audioElement).on("click", function () {
  615. recordAudioClick(this, answerList[index].Id, answerList[index].AudioUrl);
  616. });
  617. }
  618. //可作答状态,作答还原
  619. if (statusType == 0) {
  620. //已作答过,还原作答,增加作答后的UI节点
  621. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  622. $(item).children(".answer-audio-range").children("span").on("click", function () {
  623. $(".answer-body").removeClass("select-answer");
  624. $(item).addClass("select-answer");
  625. onClickAnswerPoint(JSON.stringify(answerList[index]));
  626. });
  627. }
  628. else {
  629. $(item).attr("answer-text", mytext);//填充作答内容
  630. if (mytext != "") {
  631. $(item).children(".answer-text").show();
  632. $(item).children(".answer-point-range").hide();
  633. $(item).children(".answer-text").text(mytext);
  634. }
  635. }
  636. }
  637. //已提交,作答还原
  638. if (statusType == 1) {
  639. //取消点击绑定事件
  640. $(item).unbind('click');
  641. //填充作答内容
  642. $(item).attr("answer-text", mytext);
  643. if (mytext == "") {
  644. mytext = "未作答";
  645. $(item).children(".answer-text").addClass("no-answer");
  646. }
  647. $(item).children(".answer-text").show();
  648. $(item).children(".answer-text").text(mytext);
  649. $(item).children(".answer-point-range").hide();
  650. }
  651. //已评阅,查看评阅详情
  652. if (statusType == 2) {
  653. //添加音频控制
  654. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  655. //独立绑定事件
  656. $(item).children(".answer-audio-range").children("span").on("click", function () {
  657. $(".answer-body").removeClass("select-answer");
  658. $(item).addClass("select-answer");
  659. onClickAnswerPoint(JSON.stringify(answerList[index]));
  660. });
  661. }
  662. else {
  663. $(item).attr("answer-text", mytext);//填充作答内容
  664. if (mytext == "") {
  665. mytext = "未作答";
  666. $(item).children(".answer-text").addClass("no-answer");
  667. }
  668. $(item).children(".answer-text").show();
  669. $(item).children(".answer-text").text(mytext);
  670. $(item).children(".answer-point-range").hide();
  671. }
  672. //评阅样式
  673. if (answerList[index].Score == 0 && answerList[index].Text != "") {
  674. $(item).children(".answer-text").addClass("bad-answer");
  675. }
  676. if (answerList[index].Score > 0) {
  677. $(item).children(".answer-text").addClass("good-answer");
  678. }
  679. }
  680. });
  681. }
  682. }
  683. //老师评阅学生作答
  684. function reviewStuAnswer(answerJson) {
  685. if (answerJson != "" && answerJson) {
  686. var answerObj = JSON.parse(answerJson);
  687. var selectElement = $(".answer-body[answer-id='" + answerObj.Id + "']");
  688. //$(selectElement).attr("answer-text", answerObj.Text);//用户作答内容
  689. $(selectElement).attr("answer-score", answerObj.Score);//作答评分
  690. $(selectElement).attr("answer-anstext ", answerObj.AnsText);//参考答案
  691. $(selectElement).attr("answer-comment", answerObj.Comment);//评语
  692. //评阅样式
  693. if (answerObj.Score == 0) {
  694. $(selectElement).children(".answer-text").removeClass("good-answer");
  695. $(selectElement).children(".answer-text").addClass("bad-answer");
  696. }
  697. if (answerObj.Score > 0) {
  698. $(selectElement).children(".answer-text").removeClass("bad-answer");
  699. $(selectElement).children(".answer-text").addClass("good-answer");
  700. }
  701. }
  702. }
  703. //回填所有评阅信息,answerJson:所有作答及参考答案评阅信息List
  704. function backupAllReview(answerJson) {
  705. if (answerJson != "" && answerJson) {
  706. var answerList = JSON.parse(answerJson);
  707. $.each($(".answer-body"), function (index, item) {
  708. //$(item).attr("answer-id", answerList[index].Id);//答题点ID
  709. //$(item).attr("answer-text", answerList[index].Text);//用户作答内容
  710. $(item).attr("answer-score", answerList[index].Score);//作答评分
  711. $(item).attr("answer-anstext ", answerList[index].AnsText);//参考答案
  712. $(item).attr("answer-comment", answerList[index].Comment);//评语
  713. //提交直接还原作答现场
  714. var mytext = answerList[index].Text;//我的答案
  715. var audioElement = $(item).children(".answer-audio-range").children("img").eq(0);
  716. if ((answerList[index].Type == 3 || answerList[index].Type == 4) && answerList[index].AudioUrl != "") {
  717. $(item).children(".answer-point-range").hide();
  718. $(item).children(".answer-audio-range").css("display", "inline-block");
  719. $(item).children(".answer-audio-range").children("span").text("作答音频(" + answerList[index].AudioLength + "s)");
  720. //填充作答内容
  721. $(item).attr("answer-text", mytext);
  722. if (mytext != "") {
  723. mytext = "(" + mytext + ")";
  724. $(item).children(".answer-text").show();
  725. $(item).children(".answer-text").text(mytext);
  726. }
  727. //是否之前存在作答音频
  728. $(audioElement).attr("src", PicInfo.recordPlayImgUrl);
  729. $(item).attr("answer-url", answerList[index].AudioUrl);
  730. $(item).children(".answer-audio-range").attr("play-status", "0");
  731. //独立绑定事件
  732. $(audioElement).on("click", function () {
  733. recordAudioClick(this, answerList[index].Id, answerList[index].AudioUrl);
  734. });
  735. $(item).children(".answer-audio-range").children("span").on("click", function () {
  736. $(".answer-body").removeClass("select-answer");
  737. $(item).addClass("select-answer");
  738. onClickAnswerPoint(JSON.stringify(answerList[index]));
  739. });
  740. }
  741. else {
  742. $(item).attr("answer-text", mytext);//填充作答内容
  743. if (mytext == "") {
  744. mytext = "未作答";
  745. $(item).children(".answer-text").addClass("no-answer");
  746. }
  747. $(item).children(".answer-text").show();
  748. $(item).children(".answer-text").text(mytext);
  749. $(item).children(".answer-point-range").hide();
  750. }
  751. //评阅样式
  752. if (answerList[index].Score == 0) {
  753. $(item).children(".answer-text").addClass("bad-answer");
  754. }
  755. if (answerList[index].Score > 0) {
  756. $(item).children(".answer-text").addClass("good-answer");
  757. }
  758. });
  759. }
  760. }
  761. //处理播放录音,answerid:答题点ID,isPlay:是否播放(0-暂停,1-播放)
  762. function playRecordAudio(answerid, isPlay) {
  763. //获取其他正在播放的音频
  764. var playing = $(".answer-body[answer-id='" + answerid + "']").children(".answer-audio-range");
  765. if (playing.length > 0) {
  766. if (isPlay == "1") {
  767. $(playing).attr("play-status", "1");
  768. $(playing).find("img").attr("src", PicInfo.recordPauseImgUrl);//移动端要根据本地路径替换
  769. }
  770. else {
  771. $(playing).attr("play-status", "0");
  772. $(playing).find("img").attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  773. }
  774. }
  775. }
  776. //滚动到相应DIV
  777. function scrollAnswer(answerid) {
  778. //console.log(answerid);
  779. $(".answer-body").removeClass("select-answer");
  780. var ansDom = $(".answer-body[answer-id='" + answerid + "']");
  781. $(ansDom).addClass("select-answer");
  782. var scroll_offset = $(ansDom).offset(); //得到box这个div层的offset,包含两个值,top和left
  783. var offset_top = scroll_offset.top;
  784. if (offset_top > 150) {
  785. offset_top = offset_top - 200;
  786. }
  787. $("body,html").animate({
  788. scrollTop: offset_top //让body的scrollTop等于pos的top,就实现了滚动
  789. });
  790. }
  791. //暂停播放原文音频
  792. function pauseTextAudio(audioid) {
  793. //获取其他正在播放的音频
  794. var playing = $(".audioImg[audio-id='" + audioid + "']");
  795. if (playing.length > 0) {
  796. $(playing).attr("play-status", "0");
  797. $(playing).attr("src", PicInfo.audioPauseImgUrl);//移动端要根据本地 喇叭 路径替换
  798. }
  799. }
  800. //原文音频播放按钮点击事件
  801. function audioPlayClick(myobj) {
  802. var curHtml = $(myobj).parent().find(".audioUrl").html();
  803. var curAlt = $(myobj).attr("alt");
  804. //处理当前按钮的状
  805. if ($(myobj).attr("play-status") == "1") {
  806. $(myobj).attr("play-status", "0");
  807. $(myobj).attr("src", PicInfo.audioPauseImgUrl);//移动端要根据本地 喇叭 路径替换
  808. }
  809. else {
  810. //停止其他作答音频播放
  811. var isRecordPlaying = $(".answer-audio-range[play-status='1']");
  812. if (isRecordPlaying.length > 0) {
  813. $(isRecordPlaying).attr("play-status", "0");
  814. $(isRecordPlaying).find("img").attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  815. }
  816. //停止其他原文音频播放
  817. var audioPlaying = $(".audioImg[play-status='1']");
  818. if (audioPlaying.length > 0) {
  819. $(audioPlaying).attr("play-status", "0");
  820. $(audioPlaying).attr("src", PicInfo.audioPauseImgUrl);//移动端要根据本地 喇叭 路径替换
  821. }
  822. //设置播放状态
  823. $(myobj).attr("play-status", "1");
  824. $(myobj).attr("src", PicInfo.audioPlayImgUrl);//移动端要根据本地 喇叭 路径替换
  825. }
  826. var info = new Object();
  827. info.Id = $(myobj).attr("audio-id");
  828. info.AudioUrl = curAlt;
  829. //移动端添加外部处理
  830. playVisiableAudioCallBack(1, JSON.stringify(info));
  831. }
  832. //作答录音播放按钮点击事件
  833. function recordAudioClick(myobj, id, url) {
  834. //处理当前按钮的状态
  835. if ($(myobj).parent().attr("play-status") == "0") {
  836. //停止其他作答音频播放
  837. var isRecordPlaying = $(".answer-audio-range[play-status='1']");
  838. if (isRecordPlaying.length > 0) {
  839. $(isRecordPlaying).attr("play-status", "0");
  840. $(isRecordPlaying).find("img").attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  841. }
  842. //停止其他原文音频播放
  843. var audioPlaying = $(".audioImg[play-status='1']");
  844. if (audioPlaying.length > 0) {
  845. $(audioPlaying).attr("play-status", "0");
  846. $(audioPlaying).attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地 喇叭 路径替换
  847. }
  848. //设置播放状态
  849. $(myobj).parent().attr("play-status", "1");
  850. $(myobj).attr("src", PicInfo.recordPauseImgUrl);//移动端要根据本地路径替换
  851. }
  852. else {
  853. $(myobj).parent().attr("play-status", "0");
  854. $(myobj).attr("src", PicInfo.recordPlayImgUrl);//移动端要根据本地路径替换
  855. }
  856. //移动端添加外部处理,播放录音
  857. var info = new Object();
  858. info.Id = id;
  859. info.AudioUrl = url;
  860. //移动端添加外部处理,播放录音
  861. playVisiableAudioCallBack(3, JSON.stringify(info));
  862. }
  863. function playVisiableAudioCallBack(type, url) {
  864. //console.log(url);
  865. cancelBubble();
  866. plugin.startPlay(type, url);
  867. }
  868. function onClickAnswerPoint(data) {
  869. //alert(JSON.stringify(data));
  870. //console.log(JSON.stringify(data));
  871. cancelBubble();
  872. plugin.onClickAnswerPoint(data);
  873. }
  874. function onClickKeyHide() {
  875. //alert(JSON.stringify(data));
  876. cancelBubble();
  877. plugin.onClickKeyHide();
  878. }
  879. function cancelBubble(e) {
  880. var evt = e ? e : window.event;
  881. if (evt.stopPropagation) { //W3C
  882. evt.stopPropagation();
  883. } else { //IE
  884. evt.cancelBubble = true;
  885. }
  886. }
  887. function getSelectedText(title) {
  888. var txt;
  889. if (window.getSelection) {
  890. txt = window.getSelection().toString();
  891. } else if (window.document.getSelection) {
  892. txt = window.document.getSelection().toString();
  893. } else if (window.document.selection) {
  894. txt = window.document.selection.createRange().text;
  895. }
  896. JSInterface.callback(txt, title);
  897. }