11 changed files with 61 additions and 158 deletions
@ -1,71 +0,0 @@ |
|||
import { Ref, ref, unref } from 'vue'; |
|||
|
|||
type RFSMethodName = |
|||
| 'webkitRequestFullScreen' |
|||
| 'requestFullscreen' |
|||
| 'msRequestFullscreen' |
|||
| 'mozRequestFullScreen'; |
|||
type EFSMethodName = |
|||
| 'webkitExitFullscreen' |
|||
| 'msExitFullscreen' |
|||
| 'mozCancelFullScreen' |
|||
| 'exitFullscreen'; |
|||
type FSEPropName = |
|||
| 'webkitFullscreenElement' |
|||
| 'msFullscreenElement' |
|||
| 'mozFullScreenElement' |
|||
| 'fullscreenElement'; |
|||
|
|||
export function useFullscreen( |
|||
target: Ref<Nullable<HTMLElement>> | Nullable<HTMLElement> = ref(document.documentElement), |
|||
options?: FullscreenOptions |
|||
) { |
|||
const isFullscreenRef = ref(false); |
|||
const el = document.documentElement; |
|||
let RFC_METHOD_NAME: RFSMethodName = 'requestFullscreen'; |
|||
let EFS_METHOD_NAME: EFSMethodName = 'exitFullscreen'; |
|||
let FSE_PROP_NAME: FSEPropName = 'fullscreenElement'; |
|||
|
|||
if ('webkitRequestFullScreen' in el) { |
|||
RFC_METHOD_NAME = 'webkitRequestFullScreen'; |
|||
EFS_METHOD_NAME = 'webkitExitFullscreen'; |
|||
FSE_PROP_NAME = 'webkitFullscreenElement'; |
|||
} else if ('msRequestFullscreen' in el) { |
|||
RFC_METHOD_NAME = 'msRequestFullscreen'; |
|||
EFS_METHOD_NAME = 'msExitFullscreen'; |
|||
FSE_PROP_NAME = 'msFullscreenElement'; |
|||
} else if ('mozRequestFullScreen' in el) { |
|||
RFC_METHOD_NAME = 'mozRequestFullScreen'; |
|||
EFS_METHOD_NAME = 'mozCancelFullScreen'; |
|||
FSE_PROP_NAME = 'mozFullScreenElement'; |
|||
} else if (!('requestFullscreen' in el)) { |
|||
throw new Error('当前浏览器不支持Fullscreen API !'); |
|||
} |
|||
function enterFullscreen(): Promise<void> { |
|||
isFullscreenRef.value = true; |
|||
return (unref(target) as any)[RFC_METHOD_NAME](options); |
|||
} |
|||
|
|||
function exitFullscreen(): Promise<void> { |
|||
isFullscreenRef.value = false; |
|||
return (document as any)[EFS_METHOD_NAME](); |
|||
} |
|||
|
|||
function isFullscreen(): boolean { |
|||
return unref(target) === (document as any)[FSE_PROP_NAME]; |
|||
} |
|||
|
|||
async function toggleFullscreen(): Promise<void> { |
|||
if (!unref(target)) return; |
|||
return isFullscreen() ? exitFullscreen() : enterFullscreen(); |
|||
} |
|||
|
|||
return { |
|||
// watchFullscreen,
|
|||
toggleFullscreen, |
|||
exitFullscreen, |
|||
isFullscreen, |
|||
enterFullscreen, |
|||
isFullscreenRef, |
|||
}; |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
import { useI18n } from '/@/hooks/web/useI18n'; |
|||
import { useTitle as usePageTitle } from '@vueuse/core'; |
|||
import { useGlobSetting } from '/@/hooks/setting'; |
|||
|
|||
import { REDIRECT_NAME } from '/@/router/constant'; |
|||
import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; |
|||
|
|||
export function useTitle() { |
|||
const { title } = useGlobSetting(); |
|||
const { t } = useI18n(); |
|||
|
|||
const pageTitle = usePageTitle(); |
|||
|
|||
listenerLastChangeTab((route) => { |
|||
if (route.name === REDIRECT_NAME) { |
|||
return; |
|||
} |
|||
|
|||
const tTitle = t(route?.meta?.title as string); |
|||
pageTitle.value = tTitle ? ` ${tTitle} - ${title} ` : `${title}`; |
|||
}); |
|||
} |
|||
@ -1,18 +0,0 @@ |
|||
import type { Router } from 'vue-router'; |
|||
|
|||
import { useGlobSetting } from '/@/hooks/setting'; |
|||
|
|||
import { setTitle } from '/@/utils'; |
|||
import { useI18n } from '/@/hooks/web/useI18n'; |
|||
|
|||
import { REDIRECT_NAME } from '/@/router/constant'; |
|||
|
|||
const globSetting = useGlobSetting(); |
|||
|
|||
export function createTitleGuard(router: Router) { |
|||
router.afterEach(async (to) => { |
|||
const { t } = useI18n(); |
|||
to.name !== REDIRECT_NAME && setTitle(t(to.meta.title as string), globSetting.title); |
|||
return true; |
|||
}); |
|||
} |
|||
Loading…
Reference in new issue