Skip to content

Commit 2acdec3

Browse files
authored
fix(explorer): Prevent html from being scrollable when mobile explorer is open (#1895)
* Fixed html page being scrollable when mobile explorer is open * Prettier code * Addressed comment
1 parent 9e58857 commit 2acdec3

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

quartz/components/scripts/explorer.inline.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,18 @@ let currentExplorerState: Array<FolderState>
2323
function toggleExplorer(this: HTMLElement) {
2424
const nearestExplorer = this.closest(".explorer") as HTMLElement
2525
if (!nearestExplorer) return
26-
nearestExplorer.classList.toggle("collapsed")
26+
const explorerCollapsed = nearestExplorer.classList.toggle("collapsed")
2727
nearestExplorer.setAttribute(
2828
"aria-expanded",
2929
nearestExplorer.getAttribute("aria-expanded") === "true" ? "false" : "true",
3030
)
31+
32+
if (!explorerCollapsed) {
33+
// Stop <html> from being scrollable when mobile explorer is open
34+
document.documentElement.classList.add("mobile-no-scroll")
35+
} else {
36+
document.documentElement.classList.remove("mobile-no-scroll")
37+
}
3138
}
3239

3340
function toggleFolder(evt: MouseEvent) {
@@ -270,12 +277,25 @@ document.addEventListener("nav", async (e: CustomEventMap["nav"]) => {
270277
if (mobileExplorer.checkVisibility()) {
271278
explorer.classList.add("collapsed")
272279
explorer.setAttribute("aria-expanded", "false")
280+
281+
// Allow <html> to be scrollable when mobile explorer is collapsed
282+
document.documentElement.classList.remove("mobile-no-scroll")
273283
}
274284

275285
mobileExplorer.classList.remove("hide-until-loaded")
276286
}
277287
})
278288

289+
window.addEventListener("resize", function () {
290+
// Desktop explorer opens by default, and it stays open when the window is resized
291+
// to mobile screen size. Applies `no-scroll` to <html> in this edge case.
292+
const explorer = document.querySelector(".explorer")
293+
if (explorer && !explorer.classList.contains("collapsed")) {
294+
document.documentElement.classList.add("mobile-no-scroll")
295+
return
296+
}
297+
})
298+
279299
function setFolderState(folderElement: HTMLElement, collapsed: boolean) {
280300
return collapsed ? folderElement.classList.remove("open") : folderElement.classList.add("open")
281301
}

quartz/components/styles/explorer.scss

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -263,22 +263,8 @@ li:has(> .folder-outer:not(.open)) > .folder-container > svg {
263263
}
264264
}
265265

266-
.no-scroll {
267-
opacity: 0;
268-
overflow: hidden;
269-
}
270-
271-
html:has(.no-scroll) {
272-
overflow: hidden;
273-
}
274-
275-
@media all and not ($mobile) {
276-
.no-scroll {
277-
opacity: 1 !important;
278-
overflow: auto !important;
279-
}
280-
281-
html:has(.no-scroll) {
282-
overflow: auto !important;
266+
.mobile-no-scroll {
267+
@media all and ($mobile) {
268+
overflow: hidden;
283269
}
284270
}

0 commit comments

Comments
 (0)