From 0434cac2718e12d70c6e3c3175d2f94b2eeaa3a8 Mon Sep 17 00:00:00 2001 From: CloudHill Date: Tue, 20 Oct 2020 23:40:12 +0700 Subject: [PATCH] Calculate percentage height based on scroller and content height --- mods/scroll-to-top/mod.js | 30 +++++++++++++++--------------- mods/scroll-to-top/style.css | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/mods/scroll-to-top/mod.js b/mods/scroll-to-top/mod.js index 5756dfc..7fb37be 100644 --- a/mods/scroll-to-top/mod.js +++ b/mods/scroll-to-top/mod.js @@ -77,14 +77,15 @@ module.exports = { childList: true, subtree: true, }); + function process(list) { queue = []; - let top = scroller.topDistance = store().top; + let top = scroller.topDistance = store().top || 0; if (top > 0 && store().percent) { - let pageContent = document.querySelector('.notion-page-content'); - if (pageContent) - scroller.topDistance *= pageContent.offsetHeight / 100; + let contentHeight = Array.from(scroller.children) + .reduce((h, c) => h + c.offsetHeight, 0); + scroller.topDistance *= (contentHeight - scroller.offsetHeight) / 100; } for (let { addedNodes } of list) { @@ -92,19 +93,18 @@ module.exports = { addedNodes[0] && ( addedNodes[0].className === 'notion-page-content' || addedNodes[0].className === 'notion-scroller' - ) + ) && (top > 0) ) { - if (top> 0) { - scroll.classList.add('hidden'); + scroll.classList.add('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'); - }) - } + scroller = document.querySelector('.notion-frame > .notion-scroller'); + + scroller.addEventListener('scroll', (event) => { + if (!scroller.topDistance || Math.ceil(event.target.scrollTop) < scroller.topDistance) + scroll.classList.add('hidden'); + else + scroll.classList.remove('hidden'); + }); } } } diff --git a/mods/scroll-to-top/style.css b/mods/scroll-to-top/style.css index 8fe0920..3bdb8e3 100644 --- a/mods/scroll-to-top/style.css +++ b/mods/scroll-to-top/style.css @@ -2,6 +2,7 @@ position: absolute; bottom: 33px; right: 33px; + z-index: 101; cursor: default; pointer-events: none; }