您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a quick speed interface to YouTube's middle-bottom area without interfering with existing controls.
// ==UserScript== // @name YouTube Quick Speed Interface // @name:en YouTube Quick Speed Interface // @namespace https://twitter.com/CobleeH // @version 1.14 // @description Add a quick speed interface to YouTube's middle-bottom area without interfering with existing controls. // @description:en Add a quick speed interface to YouTube's middle-bottom area without interfering with existing controls. // @author CobleeH // @match https://www.youtube.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; const speeds = [0.5, 1, 1.5, 2, 3]; // 創建速度控件 function createSpeedOptions() { const speedContainer = document.createElement('div'); speedContainer.classList.add('ytp-speed-options'); speedContainer.style.display = 'flex'; speedContainer.style.alignItems = 'center'; speedContainer.style.position = 'absolute'; speedContainer.style.right = '15px'; // 放在中間偏右的位置 speedContainer.style.bottom = '55px'; // 略高於進度條 speedContainer.style.zIndex = '9999'; speedContainer.style.background = 'rgba(0, 0, 0, 0.7)'; speedContainer.style.borderRadius = '5px'; speedContainer.style.padding = '5px 10px'; speedContainer.style.color = '#fff'; speedContainer.style.fontSize = '14px'; // 添加標籤 const label = document.createElement('span'); label.innerText = 'Speed:'; label.style.marginRight = '8px'; speedContainer.appendChild(label); // 添加速度選項 speeds.forEach(speed => { const option = document.createElement('div'); option.innerText = speed + 'x'; option.style.cursor = 'pointer'; option.style.margin = '0 5px'; option.addEventListener('click', () => { const video = document.querySelector('video'); if (video) { video.playbackRate = speed; highlightOption(option); } }); speedContainer.appendChild(option); }); return speedContainer; } // 高亮選擇的速度選項 function highlightOption(selectedOption) { const options = document.querySelectorAll('.ytp-speed-options div'); options.forEach(option => { option.style.color = '#fff'; option.style.fontWeight = 'normal'; }); selectedOption.style.color = '#ff0'; selectedOption.style.fontWeight = 'bold'; } // 插入速度選項到播放器 function insertSpeedOptions() { const chromeBottom = document.querySelector('.ytp-chrome-bottom'); if (!chromeBottom || document.querySelector('.ytp-speed-options')) return; const speedOptions = createSpeedOptions(); chromeBottom.appendChild(speedOptions); // 設置初始高亮 setInitialSpeedHighlight(); } // 初始化高亮速度選項 function setInitialSpeedHighlight() { const currentSpeed = document.querySelector('video')?.playbackRate || 1; const options = document.querySelectorAll('.ytp-speed-options div'); options.forEach(option => { if (option.innerText === currentSpeed + 'x') { highlightOption(option); } }); } // 使用 MutationObserver 監聽播放器變動 const observer = new MutationObserver(() => { insertSpeedOptions(); }); observer.observe(document.body, { childList: true, subtree: true }); // 頁面加載完成後執行 window.addEventListener('load', insertSpeedOptions); })();