From 1e4d0e077a78afd7be95fdd3d17ca63b4034a26b Mon Sep 17 00:00:00 2001 From: CloudHill <rh.cloudhill@gmail.com> Date: Tue, 20 Oct 2020 22:56:19 +0700 Subject: [PATCH] Calculate percentage every update (as opposed to every page change) --- mods/scroll-to-top/mod.js | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/mods/scroll-to-top/mod.js b/mods/scroll-to-top/mod.js index 090a6cb..5756dfc 100644 --- a/mods/scroll-to-top/mod.js +++ b/mods/scroll-to-top/mod.js @@ -67,6 +67,8 @@ module.exports = { }) let queue = []; + let scroller = document.querySelector('.notion-frame > .notion-scroller'); + const observer = new MutationObserver((list, observer) => { if (!queue.length) requestAnimationFrame(() => process(queue)); queue.push(...list); @@ -77,6 +79,14 @@ module.exports = { }); function process(list) { queue = []; + + let top = scroller.topDistance = store().top; + if (top > 0 && store().percent) { + let pageContent = document.querySelector('.notion-page-content'); + if (pageContent) + scroller.topDistance *= pageContent.offsetHeight / 100; + } + for (let { addedNodes } of list) { if ( addedNodes[0] && ( @@ -84,22 +94,16 @@ module.exports = { addedNodes[0].className === 'notion-scroller' ) ) { - let top = store().top; if (top> 0) { scroll.classList.add('hidden'); - - if (store().percent) { - top *= document.querySelector('.notion-page-content').offsetHeight / 100; - } - document - .querySelector('.notion-frame > .notion-scroller') - .addEventListener('scroll', (event) => { - if (event.target.scrollTop < top) - scroll.classList.add('hidden'); - else - scroll.classList.remove('hidden'); - }) + scroller = document.querySelector('.notion-frame > .notion-scroller'); + scroller.addEventListener('scroll', (event) => { + if (event.target.scrollTop < scroller.topDistance) + scroll.classList.add('hidden'); + else + scroll.classList.remove('hidden'); + }) } } }