Last active
June 10, 2023 07:51
-
-
Save vogler/f0bba0a52a6fed61afab19245e72b5d4 to your computer and use it in GitHub Desktop.
Tampermonkey: YouTube: always show an additional progress bar below the video (not just on mouse move or pause)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name YouTube: always show a progress bar | |
// @namespace https://gist.github.com/vogler | |
// @downloadURL https://gist.github.com/vogler/f0bba0a52a6fed61afab19245e72b5d4/raw/youtube-progress-always.tamper.js | |
// @version 0.5 | |
// @description YouTube: always show an additional progress bar below the video (not just on mouse move or pause) | |
// @author Ralf Vogler | |
// @ match https://www.youtube.com/watch?v=* // this will not work if you open youtube.com and then click on a video since it is a SPA | |
// @match https://www.youtube.com/* | |
// @grant none | |
// ==/UserScript== | |
const alsoInFullscreen = true; | |
(async function() { | |
'use strict'; | |
// style progress bar | |
const p = document.createElement('div'); | |
p.style.backgroundColor = '#909090'; // gray instead of red to avoid confusion with original progress bar | |
p.style.height = '4px'; | |
if (alsoInFullscreen) { | |
p.style.position = 'absolute'; | |
p.style.bottom = '0px'; | |
p.style.zIndex = 60; | |
// TODO align with original progress bar? hard since it has some relative margins. | |
} | |
// update its width on video progress | |
// the surrounding MutationObserver is needed for when navigating from youtube.com to a video instead of opening it in a new tab | |
// could also try https://www.tampermonkey.net/documentation.php?locale=en#api:window.onurlchange | |
(new MutationObserver((mutations, observer) => { | |
if (document.location.pathname != '/watch') return; | |
const player = document.querySelector('#ytd-player'); | |
const v = document.querySelector('#movie_player video'); | |
if (!player || !v) return; | |
observer.disconnect(); | |
player.appendChild(p); // append progress bar below video | |
console.log('youtube-progress-always:', v); | |
v.addEventListener('timeupdate', e => { | |
p.style.width = Math.round(v.currentTime) / v.duration * 100 + '%'; // Math.round to smooth progress movement a bit; could also round to percentage for fewer/coarser visual updates | |
}, { passive: true }); | |
})).observe(document, { subtree: true, childList: true }); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment