跳转到内容

API ​

通过 useFullscreen() 获取响应式状态和操作方法,适合从多个按钮、快捷键或业务逻辑中控制同一全屏目标。

演练场 ​

编辑此示例

正在加载示例…

vue
<script setup>
import { ref } from 'vue'
import { useFullscreen } from 'vue-fullscreen'

const target = ref()
const { isFullscreen, enter, exit } = useFullscreen(target, {
  pageOnly: false,
  teleport: true,
})

function report(error) {
  console.error(error)
}
</script>

<template>
  <div>
    <button :disabled="isFullscreen" @click="enter().catch(report)">
      进入全屏
    </button>
    <section ref="target">
      <button v-if="isFullscreen" @click="exit().catch(report)">
        退出全屏
      </button>
      <!-- 需要全屏的内容 -->
    </section>
  </div>
</template>

目标 ​

通过 useFullscreen() 的第一个参数指定全屏目标,支持以下类型:

目标类型示例
HTML 元素useFullscreen(document.getElementById('panel'))
Vue ref 对象useFullscreen(panelRef)
组件实例useFullscreen(panelComponent),使用其 $el
id 字符串useFullscreen('panel') 或 useFullscreen('#panel')
CSS 选择器useFullscreen('.panel')
getteruseFullscreen(() => document.getElementById('panel'))

字符串先按 id 查找(允许带 #),未找到时再按 CSS 选择器解析;两者都能匹配时,id 优先。每次进入全屏时解析当前目标。

省略目标或直接传入 null 时使用 document.body;选择器未匹配、ref 尚未挂载等无法解析目标的情况会拒绝 Promise。

各次调用的全屏状态相互独立。需要从多个位置控制同一目标时,共享同一次 useFullscreen() 调用返回的状态和方法。组件卸载时自动退出,恢复被移动的元素并移除监听器。

组件外使用 ​

useFullscreen() 也可以在组件外调用。每次调用独立管理会话;组件外没有卸载生命周期,结束时需要自行调用 exit()。

ts
import { useFullscreen } from 'vue-fullscreen'

const { enter, exit } = useFullscreen('#panel', {
  pageOnly: true,
  teleport: true,
})
await enter()
await exit()

参数 ​

ts
useFullscreen(target?: UseFullscreenTarget, options?: UseFullscreenOptions): UseFullscreenReturn

返回值 ​

属性 ​

属性类型说明
isFullscreenReadonly<Ref<boolean>>随实际退出同步的响应式状态
isSupportedComputedRef<boolean>原生全屏可用性;不影响网页全屏

方法 ​

方法签名说明
enter(): Promise<void>进入全屏
exit(): Promise<void>退出全屏
toggle(): Promise<void>切换全屏

配置项 ​

选项类型默认值
pageOnlyboolean、ref 或 getterfalse
teleportboolean、ref 或 getterfalse
fullscreenClassstring、ref 或 getter'fullscreen'

选项在每次进入时读取。原生能力不支持时自动使用网页全屏,请求失败时恢复 DOM 并拒绝 Promise。

旧版本迁移 ​

js
// 旧写法
import { api } from 'vue-fullscreen'
api.request(target, { callback: onChange })

// 新写法
import { useFullscreen } from 'vue-fullscreen'
const { isFullscreen, enter, exit } = useFullscreen(target)

基于 MIT 许可发布