How to make this pill background align with the actual button text?
2026-09-09English

| The pill shaped background needs to move lower left to be exactly behind the 1x Here is the full script code in Tampermonkey. // ==UserScript== // @name YouTube Playback Speed Toggle Button // @namespace http://tampermonkey.net/ // @version 2.2 // @description Adds a button to toggle YouTube video playback speed with fullscreen mode support and key bindings for speed control // @author Mike // @match https://www.youtube.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // ==/UserScript== (function () { 'use strict'; function addSpeedButton() { const settingsButton = document.querySelector('.ytp-settings-button'); if (!settingsButton) return; if (document.querySelector('#speed-toggle-button')) return; // Create the speed toggle button const speedToggleButton = document.createElement('button'); speedToggleButton.id = 'speed-toggle-button'; speedToggleButton.className = 'ytp-button'; speedToggleButton.textContent = '1x'; speedToggleButton.style.fontSize = '18px'; speedToggleButton.style.fontWeight = 'bold'; speedToggleButton.style.padding = '4px'; speedToggleButton.style.margin = '0'; speedToggleButton.style.position = 'relative'; speedToggleButton.style.left = '10px'; speedToggleButton.style.top = '-12px'; // Add tooltip const tooltip = document.createElement('div'); tooltip.className = 'ytp-tooltip custom-tooltip'; tooltip.textContent = 'Adjust speed (s)'; tooltip.style.position = 'absolute'; tooltip.style.padding = '6px 8px'; tooltip.style.backgroundColor = '#181818'; tooltip.style.color = '#fff'; tooltip.style.fontSize = '13px'; tooltip.style.borderRadius = '4px'; tooltip.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)'; tooltip.style.whiteSpace = 'nowrap'; tooltip.style.opacity = '0'; tooltip.style.transition = 'opacity 0.2s'; tooltip.style.pointerEvents = 'none'; tooltip.style.zIndex = '9999'; document.body.appendChild(tooltip); function showTooltip() { const rect = speedToggleButton.getBoundingClientRect(); tooltip.style.left = `${rect.left + rect.width / 2 - tooltip.offsetWidth / 2}px`; tooltip.style.top = `${rect.top + window.scrollY - tooltip.offsetHeight - 8}px`; tooltip.style.opacity = '1'; } function hideTooltip() { tooltip.style.opacity = '0'; } speedToggleButton.addEventListener('mouseover', showTooltip); speedToggleButton.addEventListener('mouseout', hideTooltip); // Function to adjust playback speed function adjustSpeed(delta) { const video = document.querySelector('video'); if (video) { let newSpeed = Math.max(0.2, Math.min(3, video.playbackRate + delta)); // Limit speed between 0.2x and 3x video.playbackRate = newSpeed; speedToggleButton.textContent = `${newSpeed.toFixed(1)}x`; } } // Click functionality: Increment speed by 0.2, loop back to 1x after 2.0x speedToggleButton.addEventListener('click', () => { const video = document.querySelector('video'); if (video) { let currentSpeed = video.playbackRate; let newSpeed = currentSpeed >= 2.0 ? 1 : currentSpeed + 0.2; // Loop back to 1x after 2.0x video.playbackRate = parseFloat(newSpeed.toFixed(1)); speedToggleButton.textContent = `${newSpeed.toFixed(1)}x`; } }); // Event listeners for key bindings document.addEventListener('keydown', (event) => { const activeElement = document.activeElement; const isInputField = activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA' || activeElement.isContentEditable; if (!isInputField) { if (event.key.toLowerCase() === 's') { adjustSpeed(0.2); // Increase speed } else if (event.key.toLowerCase() === 'a') { adjustSpeed(-0.2); // Decrease speed } else if (event.key.toLowerCase() === 'r') { // Reset speed to normal const video = document.querySelector('video'); if (video) { video.playbackRate = 1; // Reset to normal speed speedToggleButton.textContent = '1x'; // Update button text } } } }); // Insert button next to settings button settingsButton.parentNode.insertBefore(speedToggleButton, settingsButton.nextSibling); // Fullscreen detection function updateForFullscreen() { if (document.fullscreenElement) { // Increase font size in fullscreen mode speedToggleButton.style.fontSize = '24px'; tooltip.style.fontSize = '20px'; } else { // Revert to normal size speedToggleButton.style.fontSize = '18px'; tooltip.style.fontSize = '13px'; } } // Listen for fullscreen changes document.addEventListener('fullscreenchange', updateForFullscreen); } const observer = new MutationObserver(() => addSpeedButton()); observer.observe(document.body, { childList: true, subtree: true }); })(); submitted by /u/United-Road-7338 [link] [留言] |
Read original: https://www.reddit.com/r/webdev/comments/1wbjr1p/how_to_make_this_pill_background_align_with_the/
原文:https://www.a8q9.cn/en/article/en-how-to-make-this-pill-background-align-with-the-actual-butto.html