您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a float input box to adjust playback speed on YouTube after 2 seconds of user input
// ==UserScript== // @name YouTube Float Input Box for Playback Speed // @namespace http://tampermonkey.net/ // @version 2024-10-17 // @description Adds a float input box to adjust playback speed on YouTube after 2 seconds of user input // @author CigiMundus // @license MIT // @icon https://img.icons8.com/?size=96&id=hAc8LzPCcNEX&format=png // @match https://www.youtube.com/* // ==/UserScript== (function() { 'use strict'; let playbackTimer; const defaultSpeed = 1.064; function addFloatInputBox() { const likeButtonContainer = document.querySelector('#top-level-buttons-computed'); if (likeButtonContainer && !document.querySelector('.custom-float-input')) { const floatInput = document.createElement('input'); floatInput.type = 'number'; floatInput.step = '0.1'; floatInput.min = '0.1'; floatInput.max = '2'; floatInput.value = defaultSpeed; floatInput.placeholder = 'Speed (0.1 - 2)'; floatInput.className = 'custom-float-input'; floatInput.style.padding = '8px 12px'; floatInput.style.borderRadius = '12px'; floatInput.style.border = '2px solid #00796b'; floatInput.style.backgroundColor = '#e0f2f1'; floatInput.style.color = '#00796b'; floatInput.style.fontSize = '14px'; floatInput.style.marginRight = '10px'; floatInput.style.outline = 'none'; floatInput.style.transition = 'border 0.3s, box-shadow 0.3s'; floatInput.addEventListener('focus', () => { floatInput.style.border = '2px solid #004d40'; floatInput.style.boxShadow = '0 0 8px rgba(0, 77, 64, 0.4)'; }); floatInput.addEventListener('blur', () => { floatInput.style.border = '2px solid #00796b'; floatInput.style.boxShadow = 'none'; }); floatInput.addEventListener('input', (event) => { let newSpeed = parseFloat(event.target.value); if (isNaN(newSpeed) || newSpeed < 0.1) { newSpeed = 0.1; floatInput.value = newSpeed; } else if (newSpeed > 2) { newSpeed = 2; floatInput.value = newSpeed; } if (playbackTimer) { clearTimeout(playbackTimer); } playbackTimer = setTimeout(() => { const video = document.querySelector('video'); if (video) { video.playbackRate = newSpeed; console.log(`Video playback speed set to: ${newSpeed}`); } else { console.error('No video element found.'); } }, 2000); }); likeButtonContainer.insertBefore(floatInput, likeButtonContainer.firstChild); const video = document.querySelector('video'); if (video) { video.playbackRate = defaultSpeed; console.log(`Video playback speed set to default: ${defaultSpeed}`); } } } const observer = new MutationObserver((mutations) => { mutations.forEach(() => { addFloatInputBox(); }); }); observer.observe(document.body, { childList: true, subtree: true }); addFloatInputBox(); })();