// ==UserScript== // @name 自定义哔哩哔哩视频播放速度 // @namespace http://tampermonkey.net/ // @version 0.1.2 // @description 可以使用按键 z(恢复1倍速)、x(减0.1)、c(加0.1)调整倍速,支持0.1-5倍速,支持记住播放速度 // @author felix // @match https://www.bilibili.com/video/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @downloadURL none // ==/UserScript== (function () { 'use strict'; var STORAGE_KEY = { BILIBILI_VIDEO_SPEED: "bilibili_video_speed" } var SETTING = { STEP_SIZE: 0.1, MAX_SPEED: 5, MIN_SPEED: 0.1, REMEMBER_SPEED_MENU_ID: null }; var autoAddInterval = setInterval(addButton, 5000); function addButton() { clearInterval(autoAddInterval); var viewboxReport = document.getElementById("arc_toolbar_report"); var div = document.createElement("div"); div.innerHTML = ''; viewboxReport.appendChild(div); document.getElementById("reduce").onclick = function () { reduceSpeed(); }; document.getElementById("add").onclick = function () { addSpeed(); }; loadSpeed(); } function loadSpeed() { var speed = localStorage.getItem(STORAGE_KEY.BILIBILI_VIDEO_SPEED); if (speed) { changeSpeed(speed) loadRemoveSpeedMenu(); } else { changeSpeed(1) loadSaveSpeedMenu(); } } function reduceSpeed(STEP_SIZE) { if (!STEP_SIZE) STEP_SIZE = SETTING.STEP_SIZE; var speedSpan = document.getElementById("speed"); var playSpeed = Number((Number(speedSpan.innerText) * 10 - STEP_SIZE * 10) / 10).toFixed(1); changeSpeed(playSpeed); } function addSpeed(STEP_SIZE) { if (!STEP_SIZE) STEP_SIZE = SETTING.STEP_SIZE; var speedSpan = document.getElementById("speed"); var playSpeed = Number((Number(speedSpan.innerText) * 10 + STEP_SIZE * 10) / 10).toFixed(1); changeSpeed(playSpeed); } function changeSpeed(playSpeed) { if (playSpeed && playSpeed >= SETTING.MIN_SPEED && playSpeed <= SETTING.MAX_SPEED) { document.querySelector('video').PLAYBACKRATE = playSpeed; var speedSpan = document.getElementById("speed"); speedSpan.innerText = playSpeed; } } function setSpeedToStorage() { localStorage.setItem(STORAGE_KEY.BILIBILI_VIDEO_SPEED, document.querySelector('video').playbackRate); GM_unregisterMenuCommand(SETTING.remember_speed_menu_id); loadRemoveSpeedMenu(); } function removeSpeedFromStorage() { localStorage.removeItem(STORAGE_KEY.BILIBILI_VIDEO_SPEED); GM_unregisterMenuCommand(SETTING.remember_speed_menu_id); loadSaveSpeedMenu(); } function loadSaveSpeedMenu() { var remember_speed_menu_id = GM_registerMenuCommand("记住播放速度", setSpeedToStorage); SETTING.remember_speed_menu_id = remember_speed_menu_id; } function loadRemoveSpeedMenu() { var remember_speed_menu_id = GM_registerMenuCommand("忘记播放速度", removeSpeedFromStorage); SETTING.remember_speed_menu_id = remember_speed_menu_id; } // 键盘快捷键 document.onkeydown = function (e) { if (e.target.nodeName !== 'BODY') return; if (/^[zxcZXC]$/.test(e.key)) { if (e.key === 'z' || e.key === 'Z') { changeSpeed(1); } if (e.key === 'x' || e.key === 'X') { reduceSpeed(); } if (e.key === 'c' || e.key === 'C') { addSpeed(); } } }; })();