Greasy Fork is available in English.

bilibili固定进度条

在b站播放器内固定显示进度条

// ==UserScript==
// @name         bilibili固定进度条
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  在b站播放器内固定显示进度条
// @author       somenothing
// @homepage     https://github.com/somenothing/bilibili-progress-bar-pin
// @supportURL   https://github.com/somenothing/bilibili-progress-bar-pin/issues
// @match        *://*.bilibili.com/video/*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function enable_modification(control_top) {
        control_top.setAttribute("style", "opacity: 1; visibility: visible; bottom: -6px; padding: 0px; ");
    }

    function disable_modification(control_top) {
        control_top.removeAttribute("style");
    }

    window.onload = function(){
        console.log("【已加载bilibili固定进度条】")
        const control_entity = document.querySelector(".bpx-player-control-entity");
        const control_top = document.querySelector(".bpx-player-control-top");
        const progress_area = document.querySelector(".bpx-player-shadow-progress-area");

        if (control_entity.getAttribute("data-shadow-show") == "true") {
            enable_modification(control_top);
        }

        let id = setInterval(() => {
            if (document.querySelector(".bpx-player-shadow-progress-area") != null) {
                document.querySelector(".bpx-player-shadow-progress-area").setAttribute("style", "opacity: 0; visibility: hidden");
                clearInterval(id)
            }
        }, 500)

        const observer_config = { attributes: true, attributeName: "data-shadow-show", attributeOldValue: true };
        const observer_callback = function(mutationsList) {
            for(let mutation of mutationsList) {
                if (mutation.type === "attributes") {
                    if (control_entity.getAttribute("data-shadow-show") == "true") {
                        enable_modification(control_top);
                    }
                    else {
                        disable_modification(control_top);
                    }
                }
            }
        };
        const controller_observer = new MutationObserver(observer_callback);
        controller_observer.observe(control_entity, observer_config);
    }
})();