ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

b站多倍速调节(支持剧集和视频)

2021-10-13 12:00:32  阅读:249  来源: 互联网

标签:function 视频 tmpLi bilibili 剧集 video let 倍速 document


// @name         bilibili多倍速调节(支持剧集和视频)
// @namespace    lgldlk
// @version      0.2
// @description  bilibili多倍速调节(支持剧集和视频)~~~
// @author       lgldlk
// @include      *://*.bilibili.com/video/*
// @include      *://*.bilibili.tv/video/*
// @include      *://*.bilibili.com/bangumi/*
// @include      *://*.bilibili.tv/bangumi/*
// @run-at       document-start
// @grant        none
// ==/UserScript==
let cacheRate = 1,
    cacheFlag = true,
    rateArr = [ 4, 3, 2.3, 2,1.8,1.7,1.5, 1, 0.5, 0.1]
 
function waitForNode(nodeSelector, callback) {
    var node = nodeSelector();
    if (node) {
        callback(node);
    } else {
        setTimeout(function() { waitForNode(nodeSelector, callback); }, 100);
    }
}
 
 
function debounce(func, wait) {
    let timer;
    return function() {
        let context = this;
        let args = arguments;
        if (timer) clearTimeout(timer);
        timer = setTimeout(() => {
            func.apply(this, args)
        }, wait)
    }
}
 
function deleteChild(e) {
    var child = e.lastElementChild;
    while (child) {
        e.removeChild(child);
        child = e.lastElementChild;
    }
}
 
function setCacheRate(video, rate) {
    video.playbackRate = rate;
}
 
function setRateText(rate) {
    document.querySelector(".bilibili-player-video-btn-speed-name").innerText = `${rate}x`;
}
function detection(){
    let rateButtons=document.querySelector(".bilibili-player-video-btn-speed-menu-list");
    if(rateButtons.innerHTML!="5x"){
        initRateBody(null);
    }
 
}
const initRateBody = function(callBack) {
    waitForNode(() => document.querySelector('div.bilibili-player-video-btn-speed > div > ul'),
        (node) => {
            var oV = document.getElementsByTagName("video")[0];
            deleteChild(node)
            for (let i of rateArr) {
 
                var tmpLi = document.createElement('li');
                tmpLi.classList = "bilibili-player-video-btn-speed-menu-list";
                tmpLi.innerText = `${ i}x`;
                tmpLi.style.height="30px"
                tmpLi.style["font-size"]="16px"
                tmpLi.style["line-height"]="30px"
                tmpLi.addEventListener("click", function(k) {
                    return function() {
                        cacheRate = k
                        setCacheRate(oV, k)
                        setRateText(k)
                    }
                }(i));
                node.appendChild(tmpLi);
            }
            setTimeout(detection,1000)
            oV.addEventListener('DOMNodeRemoved', () => {
                if (cacheFlag == true) {
                    let tmp = debounce(function() {
                        initRateBody(setCacheRate(oV, cacheRate));
                        setRateText(cacheRate)
                        cacheFlag = true;
                    }, 1000)
                    tmp();
                }
                cacheFlag = false
            });
            callBack && callBack();
        });
};
window.onload = initRateBody(null);
window.onhashchange = function() {
    initRateBody(setCacheRate);
}

转载自:b站多倍速调节(支持剧集和视频) - Kode sumber

标签:function,视频,tmpLi,bilibili,剧集,video,let,倍速,document
来源: https://blog.csdn.net/s3474670/article/details/120740989

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有