Skip to content

Commit c6ff9ba

Browse files
committed
debounce hiding of popout when unhovering
This takes a delay of 300ms before effectively hiding the popout, and keeps it open if the mouse is inside the contents. This fixes #44
1 parent 9f7eda2 commit c6ff9ba

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

src/structbond/css/popout.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ popout-contents {
1313
padding: 8px;
1414
}
1515
popout-container.popped > popout-contents,
16+
popout-container.contents-hover > popout-contents,
1617
popout-container.header-hover > popout-contents {
1718
display: block;
1819
position: fixed;

src/structbond/main_definitions.jl

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,14 +341,32 @@ _show_popout(p::Popout) = wrapped() do Child
341341
342342
header.onclick = (e) => {container.popout()}
343343
344-
contents.onmouseenter = (e) => container.classList.toggle('contents-hover', true)
345-
contents.onmouseleave = (e) => container.classList.toggle('contents-hover', false)
344+
// Create a reusable debounced class removal function
345+
const createDebouncedClassRemover = (container, className, delay) => {
346+
return _.debounce(() => {
347+
container.classList.toggle(className, false)
348+
}, delay)
349+
}
350+
351+
const debouncedRemoveContentsHover = createDebouncedClassRemover(container, 'contents-hover', 300)
352+
const debouncedRemoveHeaderHover = createDebouncedClassRemover(container, 'header-hover', 300)
353+
354+
contents.onmouseenter = (e) => {
355+
container.classList.toggle('contents-hover', true)
356+
debouncedRemoveContentsHover.cancel()
357+
}
358+
contents.onmouseleave = (e) => {
359+
debouncedRemoveContentsHover()
360+
}
346361
347362
header.onmouseenter = (e) => {
348363
container.classList.toggle('header-hover', true)
349364
container.classList.contains('popped') ? null : positionContents()
365+
debouncedRemoveHeaderHover.cancel()
366+
}
367+
header.onmouseleave = (e) => {
368+
debouncedRemoveHeaderHover()
350369
}
351-
header.onmouseleave = (e) => container.classList.toggle('header-hover', false)
352370
</script>
353371
<style>
354372
$(CSS_Sheets.popout)

0 commit comments

Comments
 (0)