慕课网视频自动播放下一节

慕课网视频自动播放下一节,可手动开启/关闭,按回车键可全屏播放

  1. // ==UserScript==
  2. // @name 慕课网视频自动播放下一节
  3. // @name:zh-CN 慕课网视频自动播放下一节
  4. // @name:en Imooc video, auto play next section
  5. // @namespace http://bbs.91wc.net/imooc-auto-next.htm
  6. // @version 0.1.10
  7. // @description 慕课网视频自动播放下一节,可手动开启/关闭,按回车键可全屏播放
  8. // @description:zh-CN 慕课网视频自动播放下一节,可手动开启/关闭,按回车键可全屏播放
  9. // @description:en Imooc video, auto play next section, which can be manually turned on/off, press enter to play full screen
  10. // @author Wilson
  11. // @icon https://www.imooc.com/favicon.ico
  12. // @match *://www.imooc.com/video/*
  13. // @license GPL License
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. //等待jQuery加载完成和dom加载完成
  20. var waitUntil=function(condfunc, callback, interval, trys){
  21. var getGuid = getGuid||function() {
  22. var d = new Date().getTime();
  23. var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  24. var r = (d + Math.random()*16)%16 | 0;
  25. d = Math.floor(d/16);
  26. return (c=='x' ? r : (r&0x3|0x8)).toString(16);
  27. });
  28. return uuid;
  29. };
  30. var timer = {}, counter={};
  31. var waiter = function(condfunc, callback, interval, trys, guid){
  32. guid = guid || getGuid();
  33. interval = interval || 100;
  34. trys = trys || 300;
  35. counter[guid] = counter[guid] ? counter[guid]++ : 1;
  36. if(counter[guid]>trys){
  37. if(timer[guid]) clearTimeout(timer[guid]);
  38. //callback('fail');
  39. return;
  40. }
  41. timer[guid] = setTimeout(function(){
  42. if(condfunc()){
  43. if(timer[guid]) clearTimeout(timer[guid]);
  44. callback('ok');
  45. } else {
  46. if(timer[guid]) clearTimeout(timer[guid]);
  47. waiter(condfunc, callback, interval, trys, guid);
  48. }
  49. }, interval);
  50. }
  51. waiter(condfunc, callback, interval, trys);
  52. }
  53.  
  54. //监控下一节
  55. var intvelTimer=null, listenNextBtn = function(delay){
  56. delay = delay || 1000;
  57. intvelTimer=setInterval(function(){
  58. //当出现下一节时,开始播放下一节
  59. if($(".vjs-ended").length > 0 && localStorage.getItem("_w_auto_next")){
  60. $(".J-next-btn").click();
  61. }
  62. //当到达最后一节时,停止监控
  63. if($(".return-course").length > 0 && localStorage.getItem("_w_auto_next")){
  64. if(isListeningNextBtn()) stopListenNextBtn();
  65. }
  66. }, delay);
  67. }
  68. //停止监控下一节
  69. var stopListenNextBtn = function(){
  70. if(intvelTimer) clearInterval(intvelTimer);
  71. intvelTimer = null;
  72. }
  73. //是否正在监控下一节
  74. var isListeningNextBtn = function(){
  75. return intvelTimer !== null;
  76. }
  77.  
  78. waitUntil(function(){return typeof jQuery !=="undefined" && $(".vjs-remaining-time").length>0}, function(){
  79. //插入选项
  80. var autoNextHtml='<div class="video-js vjs-time-control"><label><input id="_w_auto_next_btn" type="checkbox" style="position:relative;top:2px"> 自动播放下一节</label></div>';
  81. $(".vjs-remaining-time").after(autoNextHtml);
  82. $("#_w_auto_next_btn").prop("checked", localStorage.getItem("_w_auto_next")?true:false);
  83. //进度条显示出来,方便快进
  84. $(".vjs-progress-holder").css("background-color", "#393e42");
  85.  
  86. //监控下一节
  87. listenNextBtn();
  88.  
  89. //选项改变事件
  90. $("#_w_auto_next_btn").on("change", function(){
  91. var me = $(this);
  92. if(me.is(":checked")){
  93. if(!isListeningNextBtn()) listenNextBtn();
  94. localStorage.setItem("_w_auto_next", 1);
  95. } else {
  96. if(isListeningNextBtn()) stopListenNextBtn();
  97. localStorage.setItem("_w_auto_next", "");
  98. }
  99. });
  100.  
  101. //回车全屏事件
  102. $(document).keyup(function(){
  103. if(event.keyCode==13){
  104. $(".vjs-fullscreen-control").click();
  105. }
  106. });
  107.  
  108. });
  109.  
  110. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址