From c87917abba95d6af97fc14e5f679120a324bc1b7 Mon Sep 17 00:00:00 2001 From: CloudHill Date: Tue, 20 Oct 2020 22:20:55 +0700 Subject: [PATCH] Added scroll down distance option --- mods/scroll-to-top/mod.js | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/mods/scroll-to-top/mod.js b/mods/scroll-to-top/mod.js index abc7449..c8a68f0 100644 --- a/mods/scroll-to-top/mod.js +++ b/mods/scroll-to-top/mod.js @@ -23,6 +23,12 @@ module.exports = { type: "toggle", value: true, }, + { + key: "top", + label: "scroll down distance to show button", + type: "input", + value: 100, + }, ], hacks: { "renderer/preload.js"(store, __exports) { @@ -53,6 +59,40 @@ module.exports = { behavior: store().smooth ? 'smooth' : 'auto', }); }) + + let queue = []; + const observer = new MutationObserver((list, observer) => { + if (!queue.length) requestAnimationFrame(() => process(queue)); + queue.push(...list); + }); + observer.observe(document.body, { + childList: true, + subtree: true, + }); + function process(list) { + queue = []; + for (let { addedNodes } of list) { + if ( + addedNodes[0] && ( + addedNodes[0].className === 'notion-page-content' || + addedNodes[0].className === 'notion-scroller' + ) + ) { + if (store().top> 0) { + scroll.classList.add('hidden'); + + document + .querySelector('.notion-frame > .notion-scroller') + .addEventListener('scroll', (event) => { + if (event.target.scrollTop < store().top) + scroll.classList.add('hidden'); + else + scroll.classList.remove('hidden'); + }) + } + } + } + } } }); }