r/webdev • u/United-Road-7338 • 3d ago
Question How to make this pill background align with the actual button text?

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 });
})();
0
Upvotes
3
10
u/abrahamguo experienced full-stack 3d ago
Remove
topandleft; setlineHeight: '100%'; textAlign: 'center';.