Skip to content

Commit d6de956

Browse files
committed
Only using the intersection observer when on narrower screens.
1 parent 198f34f commit d6de956

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

app/pages/package/[[org]]/[name].vue

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,16 @@ function checkHeaderPosition() {
4343
4444
let footerEl: HTMLElement | null = null
4545
let footerObserver: IntersectionObserver | null = null
46+
let footerMediaQuery: MediaQueryList | null = null
47+
const footerMediaHandler = (event: MediaQueryListEvent) => {
48+
if (event.matches) {
49+
setupFooterObserver()
50+
} else {
51+
teardownFooterObserver()
52+
}
53+
}
4654
47-
useEventListener('scroll', checkHeaderPosition, { passive: true })
48-
useEventListener('resize', checkHeaderPosition)
49-
50-
onMounted(() => {
51-
checkHeaderPosition()
52-
footerEl = document.querySelector('footer')
55+
function setupFooterObserver() {
5356
if (!footerEl) return
5457
const thresholdValues = Array.from({ length: 101 }, (_, index) => index / 100)
5558
footerObserver = new IntersectionObserver(
@@ -61,11 +64,34 @@ onMounted(() => {
6164
{ threshold: thresholdValues },
6265
)
6366
footerObserver.observe(footerEl)
64-
})
67+
}
6568
66-
onBeforeUnmount(() => {
69+
function teardownFooterObserver() {
6770
footerObserver?.disconnect()
6871
footerObserver = null
72+
navExtraOffset.value = 0
73+
}
74+
75+
useEventListener('scroll', checkHeaderPosition, { passive: true })
76+
useEventListener('resize', checkHeaderPosition)
77+
78+
onMounted(() => {
79+
checkHeaderPosition()
80+
footerEl = document.querySelector('footer')
81+
if (!footerEl) return
82+
footerMediaQuery = window.matchMedia('(max-width: 639.9px)')
83+
if (footerMediaQuery.matches) {
84+
setupFooterObserver()
85+
} else {
86+
teardownFooterObserver()
87+
}
88+
footerMediaQuery.addEventListener('change', footerMediaHandler)
89+
})
90+
91+
onBeforeUnmount(() => {
92+
teardownFooterObserver()
93+
footerMediaQuery?.removeEventListener('change', footerMediaHandler)
94+
footerMediaQuery = null
6995
})
7096
7197
const navExtraOffsetStyle = computed(() => ({

0 commit comments

Comments
 (0)