bilibili视频倍速管理器

在视频播放窗口,倍速的地方已经被替换了。需要注意的是,脚本会在打开网站的五秒后执行 更新了记住倍速功能,即使关闭浏览器再重新打开也可以按照以前的倍速设置播放视频

// ==UserScript==
// @name         bilibili视频倍速管理器
// @namespace    https://blog.csdn.net/weixin_46178937
// @homepage      https://blog.csdn.net/weixin_46178937
// @version      0.4
// @description  在视频播放窗口,倍速的地方已经被替换了。需要注意的是,脚本会在打开网站的五秒后执行    更新了记住倍速功能,即使关闭浏览器再重新打开也可以按照以前的倍速设置播放视频
// 0.2  更新了记住倍速功能,即使关闭浏览器再重新打开也可以按照以前的倍速设置播放视频  2021年10月16日11:40:19
// 0.3  优化记住倍速功能  2021年10月16日21:16:01
// 0.4  增加了对新版哔哩哔哩的支持  2023年1月7日16:21:54
// @author       ziop
// @match *://www.bilibili.com/blackboard/*
// @match *://www.bilibili.com/*video/*
// @match *://player.bilibili.com/*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    let count = 0;

    function init() {
        document.querySelector("body").removeEventListener("click", init);
        setTimeout(function () {
                // console.log("初始化标签开始")
                // 包裹这六个选项卡的菜单
                let menu = document.querySelector("ul.bpx-player-ctrl-playbackrate-menu");
                //六个控制标签
                let all = document.querySelectorAll("li.bpx-player-ctrl-playbackrate-menu-item");
                //++标签
                let plusPlus =all[0];
                //+标签
                let plus = all[1];
                // 用于展示当前速度的标签
                let currentSpeed = all[2];
                //用于还原默认素的的标签
                let defaultSpeed = all[3];
                //-标签
                let minus = all[4];
                //--标签
                let minusMinus = all[5];
                // 用于获取执行脚本时候的速度
                let showRateLabel = document.querySelector("div.bpx-player-ctrl-playbackrate-result");
                // 较大 的跨度
                let secondRate = 0.5;
                // 较小的跨度
                let firstRate = 0.25;
                //  默认速度
                let defaultRate = 1.0;
                let StorageLableName ="ziop_bilibili_speedManager_rate"


                // 对标签进行初始化
                plusPlus.innerText = "+0.5";
                plus.innerText = "+0.25";
                defaultSpeed.innerText = "还原默认速度";
                minus.innerText = "-0.25";
                minusMinus.innerText = "-0.5";
                //获取之前存储的速度
                if (localStorage.getItem(StorageLableName) == null) {
                    if (showRateLabel.innerHTML == "倍速") {
                        localStorage.setItem(StorageLableName, defaultRate);
                    } else {
                        localStorage.setItem(StorageLableName, showRateLabel.innerHTML);
                    }
                }
                currentSpeed.innerHTML = localStorage.getItem(StorageLableName);
                currentSpeed.dataset.value = localStorage.getItem(StorageLableName);
                setSpeed(parseFloat(currentSpeed.dataset.value))
                // console.log("初始化标签结束")

                // console.log("设置控制事件开始")
                plusPlus.onclick = function () {
                    let currentSpeedValue = currentSpeed.dataset.value;
                    let number = parseFloat(currentSpeedValue);
                    number += secondRate;
                    setSpeed(number);
                }

                plus.onclick = function () {
                    let currentSpeedValue = currentSpeed.dataset.value;
                    let number = parseFloat(currentSpeedValue);
                    number += firstRate;
                    setSpeed(number);
                }

                minus.onclick = function () {
                    let currentSpeedValue = currentSpeed.dataset.value;
                    let number = parseFloat(currentSpeedValue);
                    number -= firstRate;
                    setSpeed(number);
                }
                minusMinus.onclick = function () {
                    let currentSpeedValue = currentSpeed.dataset.value;
                    let number = parseFloat(currentSpeedValue);
                    number -= secondRate;
                    setSpeed(number);
                }

                defaultSpeed.onclick = function () {
                    setSpeed(defaultRate);
                }

                // 设置播放速度
                function setSpeed(rate) {
                    for (let i = 0; i < all.length; i++) {
                        if (i != 3) {
                            all[i].dataset.value = rate.toString();
                        }
                    }
                    currentSpeed.innerHTML = showRateLabel.innerHTML;
                    // console.log("first = " + currentSpeed.innerHTML)

                    currentSpeed.click();
                    // console.log("second = " + currentSpeed.innerHTML)
                    localStorage.setItem(StorageLableName, rate);
                }
                menu.style.cssText += 'width: 100px !important';
                document.querySelector("body").addEventListener("click", init);
                // console.log("设置控制事件结束")
                console.log("bilibili视频倍速管理器脚本已经执行" + (++count) + "次")
            }, 5000
        )

    }

    document.querySelector("body").addEventListener("click", init);
    window.onload = init;


})();