Greasy Fork

halihali便携按钮

快速上一集下一集,快速跳到指定位,窗口化全屏功能,切源功能。

当前为 2021-12-12 提交的版本,查看 最新版本

// ==UserScript==
// @license      MIT
// @name         halihali便携按钮
// @namespace    哈哩哈哩快速操作按钮
// @description  快速上一集下一集,快速跳到指定位,窗口化全屏功能,切源功能。
// @version      0.3
// @author       You
// @match        http://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        unsafeWindow
// @grant        GM_setValue
// @grant        GM_addValueChangeListener

// ==/UserScript==
(function () {
    'use strict';




    // Your code here...
    window.addEventListener("load", () => {

        //内播放器
        if(document.getElementById("video") && document.querySelector('video')){
            console.log("内部播放器");
            GM_addValueChangeListener("VdoControl", (name, oldValue, newValue, remote)=>{
                if(oldValue == "-1"){
                    console.log("event vdo control time ");
                    document.querySelector('video').currentTime = newValue;
                }
            });
            return;
        }
        //内播放器1
        if(document.getElementById("player1") && document.querySelector('video')){
            console.log("内部播放器1");
            GM_addValueChangeListener("VdoControl", (name, oldValue, newValue, remote)=>{
                if(oldValue == "-1"){
                    console.log("event vdo control time");
                    document.querySelector('video').currentTime = newValue;
                }
            });
            return;
        }

        //中间层
        let play = document.getElementById("divplay");
        if (play) {
            play.style.height = "100%";
            let iframe = play.querySelector("#playiframe");//内部播放器
            if (iframe) {
                console.log("内部播放器中间件");
                iframe.style.height = "100%";
                let playRoad = document.getElementById("playroad");
                playRoad.style.position = "absolute";
                playRoad.style.left = "0px";
                playRoad.style.top = "0px";
                playRoad.style.width = "100%";
                playRoad.style.opacity = "0";
                playRoad.onmouseover = function () {
                    this.style.opacity = "1";
                };
                playRoad.onmouseout = function () {
                    this.style.opacity = "0";
                };

                GM_addValueChangeListener("MsgEvent", (name, oldValue, newValue, remote)=>{
                    //console.log(document.getElementById("playroad"));
                    let resLists = document.getElementById("playroad");
                    let tagFlag = false;
                    resLists.childNodes.forEach(item => {
                        if(item.tagName == 'A'){
                            if(item.style.color == "rgb(47, 179, 255)"){
                                tagFlag = true;
                            }else if(item.style.color == "rgb(170, 170, 170)" && tagFlag){
                                tagFlag = false;
                                item.click();
                            }else if(item.style.color == "rgb(255, 0, 0)" && tagFlag){
                                tagFlag = false;
                                item.click();
                            }
                        }
                    });
                });
            }
            return;
        }

        //最外层
        if (document.getElementById("playiframe")) {//外部容器
            console.log("浏览器外壳层");
            let style = document.createElement("style");
            style.type = "text/css";
            let str = `
            .MyFullscreen {
                position:fixed;
                top:0px;
                left:0px;
                z-index:9999;
                width:100%;
                height:100%;
            }
            .PlayerSettings{
                position:fixed;
                left:0;
                z-index:999999;
                top:50vh;
                transform: translate(0,-50%);
                background:rgba(0,0,0,0.8);
                width:60px;
                min-width:50px;
                min-height:260px;
                float:left;
                padding:20px;
                border-radius:10px;
                margin:2px;
                transition: all 0.2s;
            }
            .PlayerSettings>*{
                min-width:60px;
                min-height:40px;
                float:left;
            }
            .PlayerSettings>*+*{
                margin-left:0px;
            }
            .EditView{
                text-align:center;
                width:60px;
            }
            .Hide{
                opacity:0;
            }
            `;
            style.innerHTML = str.split("\n").map(o => o.trim()).filter(o => o).join("");
            console.log(style.innerHTML);
            document.head.appendChild(style);

            let layout = document.createElement("div");
            layout.className = "PlayerSettings";
            layout.classList.add("PlayerSettings", "Hide");
            document.body.appendChild(layout);
            layout.onmouseover = function () {
                layout.classList.remove("Hide");
            };
            layout.onmouseout = function () {
                layout.classList.add("Hide");
            };

            let episodes = (add) => {
                sessionStorage.setItem("ifNextFullscreen", "true");

                let url = location.href;
                let index = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));
                index = Number.parseInt(index) + add;
                url = url.substring(0, url.lastIndexOf("/") + 1) + index + url.substring(url.lastIndexOf("."));
                location.href = url;
            }

            let fullscreens = () =>{
                sessionStorage.setItem("ifNextFullscreen", "false");
                let player = document.getElementById("player");
                player.classList.toggle("MyFullscreen", !player.classList.contains("MyFullscreen"));
            }

            let nextResVideo = () =>{
                GM_setValue("MsgEvent", URL.createObjectURL(new Blob()));
            }
            let progressVideo = (timme) =>{
                GM_setValue("VdoControl", -1);
                GM_setValue("VdoControl", timme);
            }

            let items = [
                {
                    label: "全屏",
                    click: () => {
                        fullscreens();
                    }
                },
                {
                    label: "上一集",
                    click: () => {
                        episodes(-1);
                    }
                },
                {
                    label: "下一集",
                    click: () => {
                        episodes(1);
                    }
                },
                {
                    label:"换源",
                    click:() => {
                        nextResVideo();
                    }
                },
                {
                    label:"progress"
                },
                {
                    label:"跳片头",
                    click:()=>{
                        let et = document.querySelector("#et_time").value;
                        let saveTime = (sessionStorage.getItem("headTime") == null) ? 100 : sessionStorage.getItem("headTime");
                        if(et != saveTime){
                            sessionStorage.setItem("headTime", et)
                        }
                        progressVideo(et);
                    }
                },
            ]

            items.forEach(item => {
                if(item.label == "progress"){
                    //<input type="text" id="et_time">
                    let elEt = document.createElement("input");
                    elEt.className = "EditView";
                    elEt.id = "et_time";
                    elEt.value = (sessionStorage.getItem("headTime") == null) ? 100 : sessionStorage.getItem("headTime");
                    layout.appendChild(elEt);
                }else{
                    let el = document.createElement("button");
                    el.innerText = item.label;
                    el.addEventListener("click", item.click);
                    layout.appendChild(el);
                }
            })

            if(sessionStorage.getItem("ifNextFullscreen") == "true"){
                fullscreens();
            }

        }

    })
})();