Greasy Fork is available in English.

bilibili快捷键(如倍速)

bilibili快捷键的小插件

// ==UserScript==
// @name         bilibili快捷键(如倍速)
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  bilibili快捷键的小插件
// @require      http://libs.baidu.com/jquery/2.0.0/jquery.min.js
// @include        /^https:\/\/www\.bilibili\.com\/(bangumi\/play\/|video\/)/
// @author       ZLH
//@grant none
// ==/UserScript==
// @require https://raw.githubusercontent.com/zlhlove/zlh/master/kjj.js
class shotcut {
    #fu = e => {
        this.#wblist.some((k, i) => k[1] == e.keyCode) && e.preventDefault()//阻止执行
        if (e.ctrlKey && e.keyCode in this.#sp && !(this.#sp[e.keyCode](e)))//快进快退需要调用特殊函数
            return
        this.#wblist.forEach((s, i) => {
            var d = ($(s[0]).next().length ? $(s[0]).next() : $(s[0]).parent().children().first())
            var u = ($(s[0]).prev().length ? $(s[0]).prev() : $(s[0]).parent().children().last())
            if (!this.#excu.includes(s[1]))
                u = $(s[0])
            else if (e.altKey && e.keyCode == s[1])
                d.trigger("click")
            e.ctrlKey && e.keyCode == s[1] && u.trigger("click")
            console.log(123)
        })
    }
    #wblist
    #sp
    #excu = [86, 66] //轮换设置名单
    constructor(wbl, ex, ss) {
        if (wbl != undefined && Array.isArray(wbl))
            this.#wblist = wbl
        if (ex != undefined && Array.isArray(ex))
            this.#excu = ex
        if (ss != undefined && typeof ss == 'object')
            this.#sp = ss
    }
    st() {
        $(document).on("keydown", this.#fu)
    }
    cl() {
        $(document).off("keydown", this.#fu)
    }
    //....待完善
}
//配置
const funs = {
    qui: e => {
        let jks = 0;
        let as = setInterval(() => (jks >= 18 && clearInterval(as)) || (jks++, $(window).trigger($.Event("keydown", { keyCode: e.keyCode }))), 10)
    },
    quk: e => {
        $("#bilibili-player > div > div > div.bpx-player-primary-area > div.bpx-player-video-area > div.bpx-player-control-wrap > div.squirtle-controller.squirtle-pgc.squirtle-wide-screen > div.squirtle-progress-wrap.squirtle-progress-common.ease").show()
        var bur = $("div.squirtle-progress-wrap.squirtle-progress-common")[0]
        var cha = bur.getBoundingClientRect().right - bur.getBoundingClientRect().left
        var lin = parseFloat($(".squirtle-progress-timeline").css("transform").match(/0\.\d+/)[0]) * cha + (e.keyCode - 38) * 100 + bur.getBoundingClientRect().left
        lin < bur.getBoundingClientRect().right && lin > bur.getBoundingClientRect().left &&
            $(bur).trigger($.Event("click", { "clientX": lin, "currentTarget": bur }))
         $("#bilibili-player > div > div > div.bpx-player-primary-area > div.bpx-player-video-area > div.bpx-player-control-wrap > div.squirtle-controller.squirtle-pgc.squirtle-wide-screen > div.squirtle-progress-wrap.squirtle-progress-common.ease").hide()
    }
}
const scconfig = {
    vecf: {
        wbl: [
            [".bui-switch-input", 81],//弹幕开关
            [".bilibili-player-iconfont-fullscreen-off", 90],//全屏
            [".bilibili-player-video-btn-speed-menu-list.bilibili-player-active", 66],//倍速
            [".bui-select-quality-menu .bui-select-item.bui-select-item-active", 86],//清晰度
            [".bilibili-player-video-web-fullscreen", 88],//网页全屏
            [".bilibili-player-video-btn-widescreen", 32],//网页宽屏
            ["", 37],//快进
            ["", 39],//快退
        ],//常规设置

        ssq: { 37: funs.qui, 39: funs.qui }
    },
    gmcf: {
        wbl: [
            [".bui-switch-input", 81],//弹幕开关
            ["#图层_1", 90],//全屏
            [".squirtle-select-item.active:last", 66],//倍速
            [".squirtle-select-item.active:first", 86],//清晰度
            [".squirtle-pagefullscreen-inactive", 88],//网页全屏
            [".squirtle-widescreen-inactive", 32],//网页宽屏
            ["", 37],//快进
            ["", 39],//快退
        ],//常规设置
        ssq: { 37: funs.quk, 39: funs.quk }
    }
}
const UrlArray = [
    [/^https:\/\/www\.bilibili\.com\/video\/.*/, new shotcut(scconfig.vecf.wbl, undefined, scconfig.vecf.ssq)],
    [/^https:\/\/www\.bilibili\.com\/bangumi\/.*/, new shotcut(scconfig.gmcf.wbl, undefined, scconfig.gmcf.ssq)],
]
class start {
    #url = window.location.href
    #lis = null
    constructor(li) {
        if (Array.isArray(li) &&
            li.every((v, i) => Array.isArray(v) &&
                Object.prototype.toString.call(v[0]) === "[object RegExp]"
            )) this.#lis = li
    }
    be() {
        let EffectiveWebsite = this.#lis.find(v => v[0].test(this.#url))
        EffectiveWebsite != undefined && EffectiveWebsite[1].st()
    }
}
;(new start(UrlArray)).be()