From e1996ae9067555c4b774c8de800d1b4d647c4085 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Fri, 20 Sep 2024 15:58:22 +0800 Subject: feat: enable onscroll event from plain-draggable ref: https://github.com/anseki/plain-draggable/issues/148 * put CSS properties resize and overflow-y to content of draggable item * refine CSS for handle animation --- src/css/dumbymap.css | 77 ++++++++++++++++++++++++++++------------------------ src/dumbymap.mjs | 6 ++++ 2 files changed, 48 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/css/dumbymap.css b/src/css/dumbymap.css index 40397c1..005a8f9 100644 --- a/src/css/dumbymap.css +++ b/src/css/dumbymap.css @@ -65,6 +65,12 @@ } } +.dumby-block { + border-left: #f0f0f0 0.5em solid; + padding-left: 0.5em; + margin-left: -0.5em; + margin-bottom: 3rem; +} .DumbyMap { position: relative; @@ -101,12 +107,6 @@ overflow-y: scroll; width: 100%; - .dumby-block { - border-left: #f0f0f0 0.5em solid; - padding-left: 0.5em; - margin-left: -0.5em; - } - pre { width: 100%; @@ -189,58 +189,65 @@ .draggable-block { background-color: white; - margin-bottom: 3rem; font-size: 12px; pointer-events: auto; box-sizing: content-box; position: absolute; width: fit-content; - max-height: 50vh; - max-width: 25vw; - overflow: scroll; border: solid gray; border-radius: 0.5rem; - padding-top: 0.5rem; - padding-bottom: 0; - resize: both; - - &[style*="height"], - &[style*="width"] { - max-height: unset; - max-width: unset; - } + overflow: clip; .dumby-block { border: none; - padding: 0; - } + resize: both; + padding-inline: 1em; + margin: 0; + overflow: scroll; + max-height: 50vh; + max-width: 25vw; + position: relative; - .map-container { - min-width: 200px; - } + /* allow random width/height after resize */ + &[style*="height"], + &[style*="width"] { + max-height: unset; + max-width: unset; + } - > :not(.draggable) { - margin-inline: 0.5rem; + /* gray out top of content, make draggable part easy to be seen */ + &::before { + display: block; + position: sticky; + top: 0; + content: ''; + width: 100%; + height: 1.5rem; + background: linear-gradient(0deg, rgb(255 255 255 / 0%), rgb(255 255 255 / 100%) 60%); + } + + .map-container { + min-width: 200px; + } } .draggable { display: block; + position: absolute; + width: 100%; top: 0; left: 0; - position: sticky; - background: linear-gradient(0deg, rgb(255 255 255 / 0%), rgb(255 255 255 / 100%) 60%); - margin-bottom: -18px; - transform: translate(0, -16px); - width: 100%; - padding-inline: 0; - padding-bottom: 2em; + font-size: 1.1rem; + z-index: 1; + text-align: center; - z-index: 9999; + transition: all 0.3s ease-in-out; + transform: translate(0, -0.6rem); &:hover { background: #e1e1e1; - padding-block: 1em 0.5em; + transform: unset; & ~ * { opacity: 0.7; diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index bdb7ee8..f8ce1d7 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs @@ -231,6 +231,7 @@ export const generateMaps = async (container, callback) => { const draggableContainer = block.closest('.draggable-block') if (!draggableContainer) return htmlHolder.appendChild(block) + block.removeAttribute('style') draggableContainer.draggableInstance.remove() draggableContainer.remove() } @@ -377,6 +378,11 @@ export const generateMaps = async (container, callback) => { y += 200 x = x % window.innerWidth } + + const resizeObserver = new ResizeObserver(() => { + c.draggableInstance.position(); + }).observe(c); + onRemove(c, () => resizeObserver.disconnect()) }) } else { dumbyBlocks.forEach(resumeFromDraggableContainer) -- cgit v1.2.3-70-g09d2