您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
b站多倍速调节(支持剧集和视频)🤞🤞🤞~~~
当前为
// ==UserScript== // @name b站多倍速调节(支持剧集和视频) // @namespace lgldlk // @version 0.7 // @description b站多倍速调节(支持剧集和视频)🤞🤞🤞~~~ // @author lgldlk // @include *://*.bilibili.com/video/* // @include *://*.bilibili.tv/video/* // @include *://*.bilibili.com/bangumi/* // @include *://*.bilibili.tv/bangumi/* // @run-at document-start // @grant none // @license MIT // ==/UserScript== let cacheRate = 1, cacheFlag = true, rateArr = [5, 4.5, 4, 3.5, 3, 2.5, 2, 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 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 setRate(video, rate) { video.playbackRate=rate; } function setRateText(rate) { (document.querySelector(".bpx-player-ctrl-playbackrate-result")||document.querySelector("div.bpx-player-ctrl-playbackrate-result")).innerText = `${rate}x`; } const initRateBody = function(callBack) { waitForNode(() => document.querySelector('ul.bpx-player-ctrl-playbackrate-menu')||document.querySelector("ul.bpx-player-ctrl-playbackrate-menu"), (node) => { var oV = document.querySelector("video")?document.querySelector("video"):document.querySelector("bwp-video") if (oV == undefined) { alert("清空缓存后刷新即可使用") return; } deleteChild(node) for (let i of rateArr) { var tmpLi = document.createElement('li'); tmpLi.classList = "bpx-player-ctrl-playbackrate-menu-item "; 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(e) { e.stopPropagation(); e.preventDefault(); cacheRate = k setRate(oV, k) setRateText(k) } }(i)); node.appendChild(tmpLi); } oV.addEventListener('DOMNodeRemoved', () => { if (cacheFlag == true) { let tmp = debounce(function() { initRateBody(setRate(oV, cacheRate)); setRateText(cacheRate) cacheFlag = true; }, 1000) tmp(); } cacheFlag = false }); callBack && callBack(); }); }; window.onload = initRateBody(null); window.onhashchange = function() { initRateBody(setCacheRate); }