中国大学mooc_倍速播放

加了视频倍速播放的控制,便于复习,可连续倍速播放

As of 2020-11-27. See the latest version.

// ==UserScript==
// @name         中国大学mooc_倍速播放
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  加了视频倍速播放的控制,便于复习,可连续倍速播放
// @author       kakasearch
// @match        http*://www.icourse163.org/learn/*
// @match        http*://www.icourse163.org/spoc/*
// @run-at       document-end
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==
(function() {
    'use strict';
    let mode = '刷课'//'review'
    let speed = 2 //播放倍率


    function FullScreen() {
        //全屏播放
        var ele = document.getElementsByTagName('video')[0]
        if (ele.requestFullscreen) {
            ele.requestFullscreen();
        } else if (ele.mozRequestFullScreen) {
            ele.mozRequestFullScreen();
        } else if (ele.webkitRequestFullScreen) {
            ele.webkitRequestFullScreen();
        }
    }
    function change_speed(i){//修改速度并存储
        document.getElementsByTagName('video')[0].playbackRate += i
        let new_speed = document.getElementsByTagName('video')[0].playbackRate
        GM_getValue('speed',new_speed)
    }
    function show(){//修改速度并存储
        document.querySelector(".j-report-bug").removeAttribute('href')
        document.querySelector(".j-report-bug").innerHTML='<b>播放速度:'+String(document.getElementsByTagName('video')[0].playbackRate.toFixed(1))+'</b>'
    }

    let main = ()=>{
        console.log('runmian')
        if (/content/.test(window.location.href)) {
            console.log('kaka_mooc_loaded');
            //         document.body.onkeydown = function(event) {//恢复按键屏蔽
            //             if (window.event) {
            //                 return event;
            //             }

            //         }
            //取消自动播放
            if(mode=='review'){
                let check = setInterval(function() {
                    let checkbox = document.querySelector("#courseLearn-inner-box > div > div > div.j-lscontent.lscontent > div.j-unitct.unitct > div.m-learnunitUI.f-pr.learn-plan-container > div.j-unitctBar.unitctBar.f-cb > div.f-fl > input")
                    if (checkbox) {
                        clearInterval(check)
                        checkbox.checked = false
                    }
                },
                                        100)
                }

            let pass = setInterval(function() {
                let video = document.getElementsByTagName('video')

                if (video.length > 0) {
                    clearInterval(pass)
                    video[0].currentTime = 0
                    video[0].play()
                    let has_value = GM_getValue('speed')
                    if(has_value){
                        speed = has_value
                    }
                    video[0].playbackRate = speed
                    show()
                    if(mode=='review'){
                        video[0].onended = function() { //自动播放下一p
                            if (document.querySelector(".f-fl.current").nextElementSibling == null) {
                                // 没了
                                let yid = /&id=(\d+)/.exec(window.location.href)[1]
                                let nid = parseInt(yid) + 1
                                window.location.href = window.location.href.replace(yid, String(nid))
                            } else {
                                //下1p
                                let ycid = /cid=(\d+)/.exec(window.location.href)[1]
                                let ncid = parseInt(ycid) + 1
                                window.location.href = window.location.href.replace(ycid, String(ncid))
                            }
                        }
                    }
                }
            },
                                   100)

            document.body.onkeydown = function(ev) {
                var e = ev || event;
                if (e.keyCode == 67) {
                    change_speed(0.1)
                } else if (e.keyCode == 88) {
                    change_speed(-0.1)
                } else if (e.keyCode == 13) {
                    FullScreen()
                    //全屏状态下的连续播放
                    if(mode=='review'){
                    document.querySelector("#courseLearn-inner-box > div > div > div.j-lscontent.lscontent > div.j-unitct.unitct > div.m-learnunitUI.f-pr.learn-plan-container > div.j-unitctBar.unitctBar.f-cb > div.f-fl > input").checked = false
                    if (document.getElementsByTagName('video')[0].ended) {
                        let ycid = /cid=(\d+)/.exec(window.location.href)[1]
                        let ncid = parseInt(ycid) + 1
                        window.location.href = window.location.href.replace(ycid, String(ncid))
                    }}
                } else if (e.keyCode == 39) {
                    document.getElementsByTagName('video')[0].currentTime += 5
                } else if (e.keyCode == 37) {
                    document.getElementsByTagName('video')[0].currentTime -= 5
                } else if (e.keyCode == 49) {
                    document.getElementsByTagName('video')[0].playbackRate = 1
                } else if (e.keyCode == 50) {
                    document.getElementsByTagName('video')[0].playbackRate = 2
                } else if (e.keyCode == 51) {
                    document.getElementsByTagName('video')[0].playbackRate = 3
                } else if (e.keyCode == 52) {
                    document.getElementsByTagName('video')[0].playbackRate = 4
                }else{
                    return e
                }
                GM_setValue('speed',document.getElementsByTagName('video')[0].playbackRate)
                show()

            }
        }

        // Your code here...
    }//main
    let obser = setInterval(
        function(){
            let video= document.querySelector("#courseLearn-inner-box > div > div > div.j-lscontent.lscontent > ul")
            if(video){

                clearInterval(obser)
                main()
                let observer = new MutationObserver(main)
                observer.observe(video, { attributes: true,childList: true });//检测video变化,防止中途切p失效
            }

        },200
    )





    }



)();
长期地址
遇到问题?请前往 GitHub 提 Issues。