@@ -43,13 +43,16 @@ function checkHeaderPosition() {
4343
4444let footerEl: HTMLElement | null = null
4545let 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
7197const navExtraOffsetStyle = computed (() => ({
0 commit comments