中国大学mooc_倍速播放与片头跳过

可连续倍速播放、设置播放起始位置,便于复习

目前为 2021-01-02 提交的版本。查看 最新版本

// ==UserScript==
// @name         中国大学mooc_倍速播放与片头跳过
// @namespace    http://tampermonkey.net/
// @version      1.3
// @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 //播放倍率
    let start_time = 0

    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_setValue('speed',new_speed)
    }
    function show(){//修改速度并存储
        document.querySelector("#speedText").innerText='播放速度:'+String(document.getElementsByTagName('video')[0].playbackRate.toFixed(1))

    }

    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)

                    let has_value = GM_getValue('speed')
                    if(has_value){
                        speed = has_value
                    }
                    video[0].playbackRate = speed
                    video[0].currentTime = Number(GM_getValue('start_time')) ||0
                    video[0].play()
                    let start_time = GM_getValue('start_time') ||0
                    if(! document.querySelector("#startTime")){
                    let otest = document.querySelector("div.j-unitctBar.unitctBar.f-cb")
                    let nodestr = '</br><div><b id="speedText"></b></br><b>起始秒数:</b><input type="text" id="startTime" placeholder="'+start_time+'" style="border:black;outline: auto;padding-left: 3px;"></div>'
                    let newnode=document.createRange().createContextualFragment(nodestr);
                    otest.insertBefore(newnode,document.querySelector(".j-report-bug"))
                    document.querySelector("#startTime").onblur= function(){
                        GM_setValue('start_time',Number(document.querySelector("#startTime").value))
                        GM_setValue('is_focus',0)
                    }
                    document.querySelector("#startTime").onfocus= function(){
                        GM_setValue('is_focus',1)

                    }
                        }
                    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))
                            }
                        }
                    }
                    document.body.onkeydown = function(ev) {

                        if( GM_getValue('is_focus')){
                            return ev
                        }else{
                            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()

                        }


                    }
                }
            },
                                   100)


            }

        // 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
    )





    }



)();

QingJ © 2025

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