video-play.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <?php include Doo::conf()->SITE_PATH . Doo::conf()->PROTECTED_FOLDER . "viewc//header.php"; ?>
  2. <link href="//nos.netease.com/vod163/nep.min.css" rel="stylesheet">
  3. <script src="//nos.netease.com/vod163/nep.min.js"></script>
  4. <input type="hidden" name="class" value="<?php echo $data['classinfo']['classid']; ?>:<?php echo $data['uid']; ?>" id="time">
  5. <input type="hidden" name="video" value="<?php if( isset($data['videoid']) && !empty($data['videoid']) ): ?><?php echo $data['videoid']; ?><?php endif; ?>" id="video">
  6. <input type="hidden" name="wyvideo" value="<?php if( isset($data['wyvideoid']) && !empty($data['wyvideoid']) ): ?><?php echo $data['wyvideoid']; ?><?php endif; ?>" id="wyvideo">
  7. <div class="mainWrap">
  8. <div class="width1000 mainInfo">
  9. <div class="classWrap">
  10. <div class="videoImg">
  11. <video id="my-video" class="video-js videoCon vjs-big-play-centered" controls poster="<?php echo $data['rootUrl']; ?>global/images/background.jpg" preload="auto" width="800" height="480" data-setup='{}'>
  12. </video>
  13. <div class="videoShadow" style="display: none;">
  14. <div class="videoShCon">
  15. <h3>恭喜学完本视频<label id="hasnvideo">,<span id="timeout">10</span>秒后自动切换下一节视频</label></h3>
  16. <p>下一视频内容:<span id="nextvideo">第一个HTML5网页概述</span></p>
  17. <div class="btnShWrap">
  18. <button class="btn btn-primary btn-lg active" role="button" onclick="" id="nextvideobtn">下一节</button>
  19. <button class="btn btn-default btn-lg active" role="button" onclick="resetvideo();">重新再看</button>
  20. </div>
  21. </div>
  22. </div>
  23. <div class="videoShadow2" style="display: none;" id="finishClass">
  24. <div class="videoShCon">
  25. <h3 style="width:100%; text-align:center;"><span class="glyphicon glyphicon-ok videoFinished"></span>恭喜您学完本课程</h3>
  26. <div class="btnShWrap">
  27. <button class="btn btn-default btn-lg active" role="button" onclick="continueVideo();">继续观看</button>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. <div class="classCon clearfix">
  33. <div class="classConVLeft fL">
  34. <h3><?php echo $data['classinfo']['classname']; ?></h3>
  35. <div class="classCVideo">
  36. <div class="classConLeftInfo"><span>总课时:<?php echo $data['classinfo']['classnum']; ?>课时(<?php echo $data['totalnum']; ?>小时)</span><i class="spl">|</i><span>学习进度:<span class="done_progress"><?php echo $data['user_progress']['progress']; ?></span>%(<span class="done_hh"><?php echo $data['user_progress']['donehh']; ?></span>小时)</span></div>
  37. </div>
  38. </div>
  39. <div class="classConVRight">
  40. <div class="progress">
  41. <div class="progress-bar progress-bar-success" style="min-width: 30px;width:<?php echo $data['user_progress']['progress']; ?>%" data-toggle="tooltip" data-placement="bottom" title="累计在线上课:<?php echo $data['user_progress']['doneclassnum']; ?>课时" id="progresstar">
  42. <span class="done_progress"><?php echo $data['user_progress']['progress']; ?></span>%
  43. </div>
  44. <div class="progress-bar bar-gary" style="max-width:148px;width:<?php echo $data['user_progress']['noprogress']; ?>%;" id="noprogresstar">
  45. <span class="done_noprogress"><?php echo $data['user_progress']['noprogress']; ?></span>%
  46. </div>
  47. </div>
  48. <div class="classCVideo" style="text-align: center;">
  49. <div class="classConLeftInfo"><span id="classStatus"><?php if( $data['successClass'] == 1 ): ?>已完成本课程学习<?php else: ?>本次在线时长:<span id="dtime">00:00:00</span></span><?php endif; ?></div>
  50. <input type="hidden" name="lasttime" id="lasttime" value="0" />
  51. <input type="hidden" name="doness" id="doness" value="<?php echo $data['user_progress']['doness']; ?>" />
  52. <input type="hidden" name="totalss" id="totalss" value="<?php echo $data['user_progress']['totalss']; ?>" />
  53. </div>
  54. </div>
  55. </div>
  56. <div role="tabpanel" class="tab-pane" id="profile">
  57. <?php if( isset($data['kttype']) && !empty($data['kttype']) ): ?>
  58. <?php foreach($data['kttype'] as $k1=>$v1): ?>
  59. <div class="classList">
  60. <h4><span><?php echo $v1['typeprefix']; ?></span> <?php echo $v1['typename']; ?></h4>
  61. <?php if( isset($v1['section']) && !empty($v1['section']) ): ?>
  62. <?php foreach($v1['section'] as $k2=>$v2): ?>
  63. <dl class="classSection">
  64. <?php if( $v2['ishow'] == 1 ): ?><dt><?php echo $v2['seprefix']; ?> <?php echo $v2['sename']; ?></dt><?php endif; ?>
  65. <?php if( isset($v2['video']) && !empty($v2['video']) ): ?>
  66. <?php foreach($v2['video'] as $k3=>$v3): ?>
  67. <dd>
  68. <div id="video_<?php echo $v3['videoid']; ?>" class="classVideo<?php if( ($data['videoid'] == $v3['videoid']) ): ?> now<?php endif; ?>">
  69. <a href="javascript:;" onclick="playVideo('<?php echo $v3['wy_video_id']; ?>','<?php echo $v3['videoid']; ?>');"><?php if( ($data['videoid'] == $v3['videoid']) ): ?><i class="glyphicon glyphicon-play" style="display: inline-block"></i><?php else: ?><i class="glyphicon glyphicon-play" style="display: none"></i><?php endif; ?><?php echo $v3['videoname']; ?>.<?php echo $v3['file_ext']; ?>
  70. <span class="classTime fR"><?php echo totime($v3['file_time']); ?></span>
  71. <div class="btnClassGroup">
  72. <button type="button" class="btn btn-success btnClass">立即播放</button>
  73. </div>
  74. </a>
  75. </div>
  76. </dd>
  77. <?php endforeach; ?>
  78. <?php endif; ?>
  79. </dl>
  80. <?php endforeach; ?>
  81. <?php endif; ?>
  82. </div>
  83. <?php endforeach; ?>
  84. <?php endif; ?>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. <!-- 每隔10分钟弹出验证码框 -->
  90. <div class="fade in" id="videoValidate" style="display: none;margin-left: -200px">
  91. <div class="val-dialog">
  92. <div class="modal-content">
  93. <div class="modal-body">
  94. <div class="warning">
  95. 看累了,休息一下吧~
  96. </div>
  97. </div>
  98. <div class="val-footer">
  99. <button type="button" class="btn btn-primary btnGreen btnClose" data-dismiss="modal" onclick="starttimer();">继续观看</button>
  100. <!-- <button type="button" class="btn btn-primary">Save changes</button> -->
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. <!-- Modal -->
  106. <div class="fade in" id="videoTips" <?php if( $data['successClass'] == 1 ): ?>style="display:none;"<?php endif; ?>>
  107. <div class="modal-dialog">
  108. <div class="modal-content">
  109. <div class="modal-header">
  110. <h4 class="modal-title" id="myModalLabel"><strong>温馨提示</strong></h4>
  111. </div>
  112. <div class="modal-body">
  113. <div class="warning">
  114. <ul>
  115. <li>1.课程视频必须自动播放,不能快进;</li>
  116. <li>2.课程视频进行不能挂机行为;</li>
  117. <li>3.课程视频......</li>
  118. </ul>
  119. <div class="btnShWrap">
  120. <button class="btn btn-primary btn-lg btnGreen" onclick="startclass();">开始上课</button>
  121. </div>
  122. </div>
  123. </div>
  124. <!--<div class="modal-footer">-->
  125. <!--<button type="button" class="btn btn-default btnClose" data-dismiss="modal">关闭</button>-->
  126. <!--&lt;!&ndash; <button type="button" class="btn btn-primary">Save changes</button> &ndash;&gt;-->
  127. <!--</div>-->
  128. </div>
  129. </div>
  130. </div>
  131. <?php include Doo::conf()->SITE_PATH . Doo::conf()->PROTECTED_FOLDER . "viewc//footer.php"; ?>
  132. <div class="bodyBg" <?php if( $data['successClass'] == 1 ): ?>style="display:none;"<?php endif; ?>></div>
  133. <script type="text/javascript" src="https://blueimp.github.io/JavaScript-MD5/js/md5.js"></script>
  134. <script src="<?php echo $data['rootUrl']; ?>global/js/timer.js"></script>
  135. <script>
  136. var myPlayer = neplayer('my-video');
  137. var totalnum = '<?php echo $data['totalnum']; ?>';
  138. var classid = '<?php echo $data['classinfo']['classid']; ?>';
  139. var videolist = '<?php echo trrep($data['videolist']); ?>';
  140. var videotype = '<?php echo $data['play_type']; ?>';
  141. var videosrc = '<?php echo $data['play_url']; ?>';
  142. var videotime = '<?php echo $data['play_time']; ?>';
  143. if('<?php echo $data['successClass']; ?>' == 1){
  144. myPlayer.setDataSource({type: videotype, src: videosrc});
  145. myPlayer.seekTo(parseInt(videotime)*1000);
  146. myPlayer.play();
  147. }
  148. videolist = eval('('+videolist+')');
  149. var timeout;
  150. //视频播放结束后弹出事件
  151. myPlayer.onPlayState(3,function(){
  152. $('#timeout').html(10);
  153. var thisvideo =$("#video").val();
  154. var hh =0;
  155. $.each(videolist,function(k,v){
  156. if(v.videoid == thisvideo){
  157. hh = k;
  158. }
  159. });
  160. if(videolist.length-1 == hh){
  161. $('#hasnvideo').hide();
  162. $('#nextvideo').text('');
  163. $("#nextvideobtn").attr('disabled',true);
  164. updatedata();
  165. }else{
  166. $('#hasnvideo').show();
  167. $('#nextvideo').text(videolist[hh+1]['videoname']);
  168. $("#nextvideobtn").attr('disabled',false);
  169. var videoid = videolist[hh+1]['videoid'];
  170. var video = videolist[hh+1]['wyvideoid'];
  171. $('#nextvideobtn').attr('onclick','playVideo('+video+','+videoid+');');
  172. timeout = setInterval(function(){run(video,videoid); }, 1000);
  173. }
  174. $(".videoShadow").show();
  175. });
  176. function run(video,videoid){
  177. var s = document.getElementById("timeout");
  178. if(s.innerHTML == 0){
  179. playVideo(video,videoid);
  180. return false;
  181. }
  182. s.innerHTML = s.innerHTML * 1 - 1;
  183. }
  184. function playVideo(video,videoid){
  185. clearInterval(timeout);
  186. $('dd div').removeClass('now');
  187. $('.glyphicon-play').hide();
  188. $('#video_'+videoid).addClass('now');
  189. $('#video_'+videoid+' a').children('i').show();
  190. $(".videoShadow").hide();
  191. myPlayer.pause();
  192. var nowtime = localStorage.getItem(md5($('#time').val())) || 0;
  193. var lasttime = $('#lasttime').val();
  194. var time = nowtime != 0 ? parseInt(nowtime) - parseInt(lasttime) : 0;
  195. var thisvideo = $('#video').val();
  196. var thiswyvideo = $('#wyvideo').val();
  197. var thisvideotime =parseInt(myPlayer.getCurrentPosition()/1000);
  198. var thisvideoduration = parseInt(myPlayer.getDuration()/1000);
  199. $('#video').val(videoid);
  200. $('#wyvideo').val(video);
  201. $('#lasttime').val(nowtime);
  202. localStorage.removeItem(md5($('#time').val()));
  203. $.ajax({
  204. type: 'post',
  205. url: '<?php echo $data['rootUrl']; ?>playVideo',
  206. data: {classid:'<?php echo $data['classinfo']['classid']; ?>', video:video, thisvideo:thisvideo, thiswyvideo:thiswyvideo, videotime:thisvideotime, seetime:time, duration:thisvideoduration},
  207. dataType: 'json',
  208. success: function(result){
  209. var data = result;
  210. if(data.code == 200){
  211. $('.done_progress').text(data.user_progress.progress);
  212. $('.done_noprogress').text(data.user_progress.noprogress);
  213. $('.done_hh').text(data.user_progress.donehh);
  214. $('#progresstar').attr('title','累计在线上课:'+data.user_progress.doneclassnum+'课时');
  215. $('#progresstar').css('width',data.user_progress.progress+'%');
  216. $('#noprogresstar').css('width',data.user_progress.noprogress+'%');
  217. myPlayer.setDataSource({type: data.type, src:data.url});
  218. myPlayer.seekTo(parseInt(data.seetime)*1000);
  219. myPlayer.play();
  220. }else{
  221. alert('播放源有问题,请联系客服');
  222. }
  223. }
  224. })
  225. }
  226. function resetvideo(){
  227. $(".videoShadow").hide();
  228. clearInterval(timeout);
  229. myPlayer.seekTo(0);
  230. myPlayer.play();
  231. }
  232. window.onunloadcancel = function()
  233. {
  234. myPlayer.play();
  235. }
  236. window.onbeforeunload = function(event) {
  237. myPlayer.pause();
  238. setTimeout(function(){setTimeout(onunloadcancel, 0)}, 0);
  239. updatedata();
  240. return false;
  241. }
  242. function updatedata(){
  243. var nowtime = localStorage.getItem(md5($('#time').val())) || 0;
  244. var lasttime = $('#lasttime').val();
  245. var time = nowtime != 0 ? parseInt(nowtime) - parseInt(lasttime) : 0;
  246. var video = $('#video').val();
  247. var wyvideo = $('#wyvideo').val();
  248. var videotime =parseInt(myPlayer.getCurrentPosition()/1000);
  249. var videoduration = parseInt(myPlayer.getDuration()/1000);
  250. $('#lasttime').val(nowtime);
  251. localStorage.removeItem(md5($('#time').val()));
  252. $.ajax({
  253. type: 'post',
  254. url: '<?php echo $data['rootUrl']; ?>updateClassAndVideo',
  255. data: {seetime:time,classid:'<?php echo $data['classinfo']['classid']; ?>',video:video,wyvideo:wyvideo,videotime:videotime,duration:videoduration},
  256. dataType: 'json',
  257. success: function(result){
  258. var data = result;
  259. $('.done_progress').text(data.user_progress.progress);
  260. $('.done_noprogress').text(data.user_progress.noprogress);
  261. $('.done_hh').text(data.user_progress.donehh);
  262. $('#progresstar').attr('title','累计在线上课:'+data.user_progress.doneclassnum+'课时');
  263. $('#progresstar').css('width',data.user_progress.progress+'%');
  264. $('#noprogresstar').css('width',data.user_progress.noprogress+'%');
  265. }
  266. });
  267. }
  268. function continueVideo(){
  269. $(".videoShadow2").hide();
  270. clearInterval(timeout);
  271. myPlayer.play();
  272. }
  273. </script>
  274. </body>
  275. </html>