Skip to content

usePageVisibility

监听页面的可见性状态,检测标签页切换、窗口最小化等事件。

前置依赖

依赖参数

参数名类型说明
deps.vue.ref<T>(value: T) => Ref<T>Vue ref 函数
deps.vue.onMounted(fn: () => void) => voidVue onMounted 钩子
deps.vue.onUnmounted(fn: () => void) => voidVue onUnmounted 钩子
deps.documentDocumentVisibilityDocument 对象

环境要求

浏览器 API: Page Visibility API

所有主流浏览器都支持。

函数签名

typescript
function usePageVisibility(
  deps: UsePageVisibilityDeps
): UsePageVisibilityReturn

interface UsePageVisibilityDeps {
  vue: VueCompositionAPI
  document: DocumentVisibility
}

interface UsePageVisibilityReturn {
  isSupported: Ref<boolean>
  isVisible: Ref<boolean>
  visibilityState: Ref<'visible' | 'hidden' | 'prerender'>
}

参数

参数名类型必填说明
depsUsePageVisibilityDeps依赖注入对象

返回值

属性类型说明
isSupportedRef<boolean>是否支持 Page Visibility API
isVisibleRef<boolean>页面是否可见
visibilityStateRef<'visible' | 'hidden' | 'prerender'>详细的可见性状态

工作原理

  1. 检查浏览器是否支持 Page Visibility API
  2. 监听 visibilitychange 事件
  3. 实时更新 isVisiblevisibilityState 状态
  4. 组件卸载时清理事件监听器

触发场景:

  • 切换到其他标签页
  • 最小化浏览器窗口
  • 锁屏
  • 使用 Alt+Tab 切换应用

应用场景:

  • 视频播放器:页面隐藏时暂停视频
  • 游戏:页面隐藏时暂停游戏
  • 轮播图:页面隐藏时停止自动播放
  • 数据更新:页面隐藏时降低更新频率
  • 动画效果:页面隐藏时停止动画

异常

无异常抛出