@@ -5,11 +5,12 @@ import type { Ref, UnwrapNestedRefs } from 'vue'
55import { useBewlyApp } from ' ~/composables/useAppProvider'
66import { useDark } from ' ~/composables/useDark'
77import { useDelayedHover } from ' ~/composables/useDelayedHover'
8+ import { useWebFullscreen } from ' ~/composables/useWebFullscreen'
89import { OVERLAY_SCROLL_BAR_SCROLL , TOP_BAR_VISIBILITY_CHANGE } from ' ~/constants/globalEvents'
910import { AppPage } from ' ~/enums/appEnums'
1011import { settings } from ' ~/logic'
1112import api from ' ~/utils/api'
12- import { getUserID , isHomePage , isInIframe , isVideoOrBangumiPage , queryDomUntilFound , removeHttpFromUrl } from ' ~/utils/main'
13+ import { getUserID , isHomePage , isInIframe , removeHttpFromUrl } from ' ~/utils/main'
1314import emitter from ' ~/utils/mitt'
1415import { createTransformer } from ' ~/utils/transformer'
1516
@@ -343,34 +344,9 @@ onUnmounted(() => {
343344 emitter .off (OVERLAY_SCROLL_BAR_SCROLL )
344345})
345346
346- // #region Hide the top bar when entering web fullscreen (网页全屏)
347- // On normal video pages Bilibili's web-fullscreen player layer happens to cover the top bar,
348- // but on bangumi pages (`/bangumi/play/`) it doesn't, leaving the top bar floating over the video.
349- // So we explicitly detect web fullscreen via the player's web-fullscreen button state and hide the
350- // top bar ourselves. (The drawer/iframe case is handled separately in App.vue.)
351- let webFullscreenObserver: MutationObserver | null = null
352- const webFullscreenAbort = new AbortController ()
353-
354- onMounted (() => {
355- if (isInIframe () || ! isVideoOrBangumiPage ())
356- return
357-
358- queryDomUntilFound (' .bpx-player-ctrl-btn.bpx-player-ctrl-web' , 500 , webFullscreenAbort ).then ((webFullscreenBtn ) => {
359- if (! webFullscreenBtn )
360- return
361-
362- webFullscreenObserver = new MutationObserver (() => {
363- toggleTopBarVisible (! webFullscreenBtn .classList .contains (' bpx-state-entered' ))
364- })
365- webFullscreenObserver .observe (webFullscreenBtn , { attributes: true , attributeFilter: [' class' ] })
366- })
367- })
368-
369- onUnmounted (() => {
370- webFullscreenObserver ?.disconnect ()
371- webFullscreenAbort .abort ()
372- })
373- // #endregion
347+ // Hide the top bar when entering web fullscreen (网页全屏). See useWebFullscreen for details.
348+ const { isWebFullscreen } = useWebFullscreen ()
349+ watch (isWebFullscreen , webFullscreen => toggleTopBarVisible (! webFullscreen ))
374350
375351async function initData() {
376352 await getUserInfo ()
0 commit comments