To Keep Scroll Position After Clicking Tabs on YouTube Channel Page
// ==UserScript==
// @name Keep Scroll Position After Clicking Tabs on YouTube Channel Page
// @namespace UserScript
// @match https://www.youtube.com/*
// @grant none
// @version 1.1
// @license MIT
// @author CY Fung
// @description To Keep Scroll Position After Clicking Tabs on YouTube Channel Page
// ==/UserScript==
let lastScrollTop = 0;
let lastScrollTopUpdatedAt = 0;
const _requestAnimationFrame = requestAnimationFrame;
async function checker(tab, endAt) {
while (Date.now() - lastScrollTopUpdatedAt < endAt) {
if (lastScrollTop !== document.documentElement.scrollTop) {
lastScrollTopUpdatedAt = 0;
if(tab.classList.contains('iron-selected')){
document.documentElement.scrollTop = lastScrollTop;
Promise.resolve().then(() => {
document.documentElement.scrollTop = lastScrollTop;
})
setTimeout(() => {
document.documentElement.scrollTop = lastScrollTop;
}, 1)
}
return;
}
await new Promise(_requestAnimationFrame)
}
lastScrollTopUpdatedAt = 0;
}
document.addEventListener('click', (evt) => {
if (!evt || !evt.isTrusted) return;
const target = evt.target;
Promise.resolve().then(() => {
let tab;
if (target instanceof HTMLElement) {
tab = HTMLElement.prototype.closest.call(target, 'tp-yt-paper-tab.style-scope.ytd-c4-tabbed-header-renderer');
}
if (!tab) return;
if (document.documentElement.scrollTop > 10) {
lastScrollTop = document.documentElement.scrollTop;
lastScrollTopUpdatedAt = Date.now();
checker(tab, 830)
}
})
}, true)