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