// ==UserScript== // @icon http://9.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/logo_pc_rich.png // @name 在线云课堂(腾讯、网易、慕课网...)增加多倍速/去除xxx正在播放/自动播放下一条视频 // @namespace http://tampermonkey.net/ // @version 0.5 // @description 腾讯课堂、慕课网、网易云课堂添加多倍速播放(默认最大 2 倍速,支持到 4 倍速)/自动播放下一个视频(携带上一个视频的倍速);腾讯课堂去除漂浮水印; // @author Bamboo // @include /^http(s?)://www.imooc.com/(.*)$/ // @include /^http(s?)://ke.qq.com/(.*)$/ // @include /^http(s?)://study.163.com/(.*)$/ // @match *://ke.qq.com/webcourse/* // @match *://study.163.com/course/* // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js // @run-at document-end // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/404117/%E5%9C%A8%E7%BA%BF%E4%BA%91%E8%AF%BE%E5%A0%82%28%E8%85%BE%E8%AE%AF%E3%80%81%E7%BD%91%E6%98%93%E3%80%81%E6%85%95%E8%AF%BE%E7%BD%91%29%E5%A2%9E%E5%8A%A0%E5%A4%9A%E5%80%8D%E9%80%9F%E5%8E%BB%E9%99%A4xxx%E6%AD%A3%E5%9C%A8%E6%92%AD%E6%94%BE%E8%87%AA%E5%8A%A8%E6%92%AD%E6%94%BE%E4%B8%8B%E4%B8%80%E6%9D%A1%E8%A7%86%E9%A2%91.user.js // @updateURL https://update.greasyfork.icu/scripts/404117/%E5%9C%A8%E7%BA%BF%E4%BA%91%E8%AF%BE%E5%A0%82%28%E8%85%BE%E8%AE%AF%E3%80%81%E7%BD%91%E6%98%93%E3%80%81%E6%85%95%E8%AF%BE%E7%BD%91%29%E5%A2%9E%E5%8A%A0%E5%A4%9A%E5%80%8D%E9%80%9F%E5%8E%BB%E9%99%A4xxx%E6%AD%A3%E5%9C%A8%E6%92%AD%E6%94%BE%E8%87%AA%E5%8A%A8%E6%92%AD%E6%94%BE%E4%B8%8B%E4%B8%80%E6%9D%A1%E8%A7%86%E9%A2%91.meta.js // ==/UserScript== var website_url = window.location.href || document.location.href; var website_host = window.location.host || document.location.host; /** * 网易云课堂 */ var StudyWy = { //添加多倍速播放 addWyExtSpeedPlay() { $('.m-popover-rate').css('display', 'none'); let appendHtml = ''; $('.j-aotoplaybox').after(appendHtml); } } /** * 腾讯课堂 */ var Bamboo = { /** * 根据属性获取标签,列表返回。 * tagName 要获取元素的标签 * attrName 属性名 * attrVal 属性值 **/ getDom(tagName, attrName, attrVal) { var selectElement = []; var element = document.getElementsByTagName(tagName); for (var i = 0; i < element.length; i++) { var tmpVal = element[i].getAttribute(attrName); if (attrVal === tmpVal) { selectElement.push(element[i]); } } return selectElement; }, /** * 根据父 dom 元素获取子 dom 元素, * parentDom 要获取的父 dom 元素 * tagName 要获取的子 dom 的标签 * index 要获取子 dom 的索引(第几个元素,默认第 1 个元素-index=0) **/ getChildDom(parentDom, tagName, index) { var children = parentDom.getElementsByTagName(tagName); if (children) { if (index) { return children[index] } return children[0] } return null; }, removeWatermark() { var head = document.head var style = document.createElement("style") style.type = "text/css" var css = [ "a[class*='marquee animation'],txpdiv[class*='player-inject'] {", " display: none!important;", "}", "#x-tcp-container > txpdiv {", " display: none!important;", "}", ].join("\n") var text = document.createTextNode(css) style.appendChild(text) head.appendChild(style) }, liClickEvent() { var tmpList = document.querySelectorAll("div.loki-playbackrate"); var tmpUlList; for (var i = 0; i < tmpList.length; i++) { var tmp = Bamboo.getChildDom(tmpList[i], 'ul'); if (tmp) { tmpUlList = tmp } } var childNodes = tmpUlList.childNodes; for (var j = 0; j < childNodes.length; j++) { var li = childNodes[j]; var attrVal = li.getAttribute("loki-menu-selected"); var classAttrVal = li.getAttribute("class"); if (classAttrVal && classAttrVal.indexOf('loki-menu-selected') > -1) { li.setAttribute('class', classAttrVal.substring(0, classAttrVal.indexOf('loki-menu-selected') - 1)); } } var rateDiv = document.querySelector("div.loki-playbackrate"); var rateVal = rateDiv.querySelectorAll('button.loki-rate-button') var classVal = this.getAttribute('class') classVal = classVal.concat("loki-menu-selected"); var selectSpeedText = this.innerText; var selectSpeed = 1; rateVal[0].innerText = selectSpeedText; if (selectSpeedText) { selectSpeed = selectSpeedText.replace(/x/, '').replace(/倍/, '') } var video = document.getElementsByTagName("video")[0] || document.getElementById("videoPlayer") || document.querySelector('video'); if (video) { video.play(); video.playbackRate = selectSpeed; } }, initFunc(){ console.log('initFunc ----- bamboo') var ulList; //定义播放速度列表 var extSpeedArr = [0.8, 1, 1.25, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7]; var playSpeedList = document.querySelectorAll("div.loki-playbackrate"); var button; for (var i = 0; i < playSpeedList.length; i++) { var tmp = Bamboo.getChildDom(playSpeedList[i], 'ul'); var tmp1 = Bamboo.getChildDom(playSpeedList[i], 'button'); if (tmp) { ulList = tmp } if (tmp1) { button = tmp1; } } if (!ulList || !ulList.innerHTML) { return } ulList.innerHTML = ''; for (var j = 0; j < extSpeedArr.length; j++) { var appendLi = document.createElement('li'); appendLi.setAttribute('class', 'vjs-menu-item') appendLi.setAttribute('tabindex', '-1') appendLi.setAttribute('role', 'menuitemcheckbox') appendLi.setAttribute('aria-live', 'polite') appendLi.setAttribute('aria-disabled', 'false') appendLi.setAttribute('aria-checked', 'false') var liSpan1 = document.createElement('span'); liSpan1.setAttribute('class', 'vjs-menu-item-text'); liSpan1.innerText = extSpeedArr[j] + 'x'; appendLi.appendChild(liSpan1); var liSpan2 = document.createElement('span'); liSpan2.setAttribute('class', 'vjs-control-text'); appendLi.appendChild(liSpan1); appendLi.appendChild(liSpan2); ulList.append(appendLi) if (appendLi.addEventListener) { appendLi.addEventListener("click", Bamboo.liClickEvent, false); } if (appendLi.attachEvent) { appendLi.attachEvent("onclick", Bamboo.liClickEvent); } } } }; /** * imooc 网 */ //imooc 添加多倍速播放 let Mooc = { moocLiClickEvent(obj) { $(obj).parent().find('li').removeClass('current') $(obj).addClass('current'); var currentSpeedText = $(obj).text(); var currentSpeed = currentSpeedText.replace(/[^0-9]/ig, ''); var cssAttrs = $('.vjs-playback-rate-value').attr('class'); var rateNum = cssAttrs.replace(/[^0-9]/ig, ''); $('.vjs-playback-rate-value').removeClass('rate' + rateNum + 'x').addClass('rate' + (currentSpeed * 10 > 100 ? (currentSpeed * 10 / 10) : currentSpeed * 10) + 'x') if (currentSpeed.length == 2) { currentSpeed = currentSpeed / 10; } else if (currentSpeed.length == 3) { currentSpeed = currentSpeed / 100; } $('.vjs-playback-rate-value').css('background-image', 'url()'); $('.vjs-playback-rate-value').text(currentSpeed + 'x'); var video = document.getElementsByTagName("video")[0] || document.getElementById("videoPlayer") || document.querySelector('video'); if (video) { video.play(); video.playbackRate = currentSpeed; } }, addMoocExtSpeedPlay() { var extSpeedArr = ['2.5x', '3x', '3.5x', '4x','4.5x','5x','5.5x','6x','6.5x','7x']; var ulList = $('#vjsMenu').children('ul') var appendHtml = '