西瓜视频播放倍速自定义,可记忆

西瓜视频倍速自定义,刷新浏览器也不会丢失之前设置的速度

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         西瓜视频播放倍速自定义,可记忆
// @namespace    765aa98d40d84afdbda7d9d7e1bcd5fa
// @version      0.5
// @description  西瓜视频倍速自定义,刷新浏览器也不会丢失之前设置的速度
// @author       tomoya
// @include      http*://*ixigua.com/*
// @grant        none
// ==/UserScript==

(function () {
    "use strict";

    const STORAGE_NAME = "_third_plugin_player_speed_";
    const speeds = [0.5, 1, 1.5, 2, 2.5, 3, 4, 5];

    let playerBlockDiv, videoDom, speedDiv;

    let initTimer = setInterval(function () {
        playerBlockDiv = document.querySelector("#player_default");
        videoDom = document.querySelector("video");
        if (playerBlockDiv && videoDom) {
            speedDiv = document.createElement("div");
            speedDiv.style.display = "flex";
            speedDiv.style.paddingBottom = "5px";
            let speedItemDivs = [];
            for (let i = 0; i < speeds.length; i++) {
                let speedItemDiv = document.createElement("div");
                speedItemDiv.id = "speed_" + i;
                speedItemDiv.innerText = speeds[i];
                speedItemDiv.style.width = "32px";
                speedItemDiv.style.height = "32px";
                speedItemDiv.style.textAlign = "center";
                speedItemDiv.style.lineHeight = "32px";
                speedItemDiv.style.backgroundColor = "lightgray";
                speedItemDiv.style.marginRight = "5px";
                speedItemDiv.style.color = "white";
                speedItemDiv.style.cursor = "pointer";
                speedItemDiv.style.borderRadius = "5px";
                speedItemDiv.addEventListener("click", function (e) {
                    for (let j = 0; j < speedItemDivs.length; j++) {
                        speedItemDivs[j].style.backgroundColor = "lightgray";
                    }
                    e.target.style.backgroundColor = "pink";
                    videoDom.playbackRate = parseFloat(speeds[i]);
                    localStorage.setItem(STORAGE_NAME, speeds[i]);
                })
                speedItemDivs.push(speedItemDiv);
                speedDiv.appendChild(speedItemDiv);
            }
            if (document.querySelector(".teleplayPage")) {
                speedDiv.style.paddingTop = "12px";
                speedDiv.style.paddingRight = "80px";
                speedDiv.style.paddingBottom = "0px";
                speedDiv.style.paddingLeft = "80px";
                speedDiv.style.position = "relative";
                speedDiv.style.bottom = "-10px";
                speedDiv.style.top = "12px";
            }
            playerBlockDiv.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(speedDiv, playerBlockDiv.parentNode.parentNode.parentNode.parentNode);
            clearInterval(initTimer);
        }
    }, 200);

    let activeBtn = false;
    let initSpeedTimer = setInterval(function () {
        if (speedDiv && videoDom) {
            // init default speed
            let storageSpeed = parseFloat(localStorage.getItem(STORAGE_NAME)) || 1;
            if (!activeBtn || storageSpeed !== parseFloat(videoDom.playbackRate)) {
                let index = speeds.indexOf(storageSpeed);
                if (index >= 0) {
                    speedDiv.querySelector("#speed_" + index).click();
                } else {
                    speedDiv.querySelector("#speed_1").click();
                }
                activeBtn = true;
            }
        }
    }, 500);

})();