您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Temporarily boost playback speed by holding Spacebar or Left Mouse Button. Includes speed slider 1x-8x and delay.
// ==UserScript== // @name YouTube Playback Speed with Slider + Hold (Space/Click) // @namespace http://tampermonkey.net/ // @version 1.1 // @description Temporarily boost playback speed by holding Spacebar or Left Mouse Button. Includes speed slider 1x-8x and delay. // @match https://www.youtube.com/* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; let speed = parseFloat(localStorage.getItem('youtubeSpeed')) || 4.0; let normalSpeed = 1.0; let spaceHeld = false; let mouseHeld = false; let spaceDelayTimer = null; let mouseDelayTimer = null; function updatePlaybackRate() { const video = document.querySelector('video'); if (video) { video.playbackRate = (spaceHeld || mouseHeld) ? speed : normalSpeed; } } setInterval(updatePlaybackRate, 100); document.addEventListener('keydown', (e) => { if (e.code === 'Space' && !spaceHeld && !spaceDelayTimer) { const active = document.activeElement.tagName.toLowerCase(); if (active === 'input' || active === 'textarea' || document.activeElement.isContentEditable) return; // Verzögerung von 300ms bevor Space aktiviert spaceDelayTimer = setTimeout(() => { spaceHeld = true; updatePlaybackRate(); }, 300); } }); document.addEventListener('keyup', (e) => { if (e.code === 'Space') { clearTimeout(spaceDelayTimer); spaceDelayTimer = null; spaceHeld = false; updatePlaybackRate(); } }); document.addEventListener('mousedown', (e) => { const video = document.querySelector('video'); if (e.button === 0 && video && video.contains(e.target)) { // Verzögerung von 300ms bevor Maushalten aktiviert mouseDelayTimer = setTimeout(() => { mouseHeld = true; updatePlaybackRate(); }, 300); } }); document.addEventListener('mouseup', (e) => { if (e.button === 0) { clearTimeout(mouseDelayTimer); mouseDelayTimer = null; mouseHeld = false; updatePlaybackRate(); } }); function createSliderMenu() { if (document.getElementById('sliderSpeedContainer')) return; const videoContainer = document.querySelector('.html5-video-player'); if (!videoContainer) return; const container = document.createElement('div'); container.id = 'sliderSpeedContainer'; container.style.position = 'absolute'; container.style.top = '100%'; container.style.left = '90%'; container.style.transform = 'translateX(-50%)'; container.style.display = 'flex'; container.style.alignItems = 'center'; container.style.gap = '6px'; container.style.fontSize = '14px'; container.style.color = '#fff'; container.style.background = 'rgba(0, 0, 0, 0)'; container.style.borderRadius = '5px'; container.style.padding = '5px'; container.style.zIndex = '9999'; container.style.width = '210px'; container.style.boxSizing = 'border-box'; const label = document.createElement('span'); label.textContent = 'Speed:'; const slider = document.createElement('input'); slider.type = 'range'; slider.min = 1; slider.max = 8; slider.step = 0.5; slider.value = speed; slider.style.width = '120px'; slider.style.margin = '0'; const valueDisplay = document.createElement('span'); valueDisplay.textContent = `${speed}x`; slider.addEventListener('input', () => { speed = parseFloat(slider.value); valueDisplay.textContent = `${speed}x`; localStorage.setItem('youtubeSpeed', speed); }); container.appendChild(label); container.appendChild(slider); container.appendChild(valueDisplay); videoContainer.parentElement.appendChild(container); } const checkInterval = setInterval(() => { const video = document.querySelector('video'); if (video) { createSliderMenu(); } }, 1000); })();