跳转到内容

Vue 2 API ​

导入 API 可以控制已有元素。每个操作都返回 Promise。

本页参考

完整的参数、返回值和方法列表见API 参考。

vue
<template>
  <div>
    <button @click="enter">进入全屏</button>
    <section ref="target">
      <h2>内容区域</h2>
      <button v-if="active" @click="exit">退出全屏</button>
    </section>
    <p v-if="error" role="alert">{{ error }}</p>
  </div>
</template>

<script>
import { fullscreen } from 'vue-fullscreen'
export default {
  data: () => ({ active: false, error: '' }),
  methods: {
    async enter() {
      try {
        await fullscreen.request(this.$refs.target, {
          pageOnly: true,
          teleport: true,
          callback: (isFullscreen) => {
            this.active = isFullscreen
          },
        })
      } catch (error) {
        this.error = error.message
      }
    },
    async exit() {
      try {
        await fullscreen.exit()
      } catch (error) {
        this.error = error.message
      }
    },
  },
  beforeDestroy() {
    if (fullscreen.element === this.$refs.target)
      void fullscreen.exit().catch(() => {})
  },
}
</script>

示例使用网页全屏。原生模式下,应在路由离开守卫中等待 fullscreen.exit(),再移除目标。

目标类型 ​

目标支持 HTML 元素、Vue 模板 ref、组件实例(使用 $el)、id 字符串('panel' 或 '#panel')以及 getter。每次进入时解析当前目标;id 不存在或 ref 尚未挂载会拒绝 Promise,不会让 body 意外全屏。省略目标或直接传入 null 时控制 document.body。

js
await fullscreen.request('panel') // id
await fullscreen.request('#panel') // 带 # 的 id
await fullscreen.request(this.$refs.target) // DOM 元素或 Vue 组件

切换与强制状态 ​

ts
await fullscreen.toggle(element, { pageOnly: true }) // 根据当前状态切换
await fullscreen.toggle(element, { pageOnly: true }, true) // 强制进入
await fullscreen.toggle(element, undefined, false) // 强制退出
await fullscreen.exit() // 已退出时不执行操作

request() 默认控制 document.body。已处于全屏时再次 request() 不会切换目标;先退出,再请求新目标。

保留用户手势

原生全屏请求要直接由点击、按键等操作触发。不要先等待网络请求再调用 request(),否则浏览器可能拒绝。

参考 ​

方法 ​

ts
fullscreen.request(target?: FullscreenTarget, options?: ApiOptions): Promise<void>
fullscreen.toggle(target?: FullscreenTarget, options?: ApiOptions, force?: boolean): Promise<void>
fullscreen.exit(): Promise<void>

状态 ​

属性类型说明
isFullscreenboolean当前控制器状态
isEnabledboolean原生全屏支持情况
elementElement | null目标元素,退出后为 null
options会话配置当前配置;不要在会话期间修改

这些是普通属性,不是 Vue 的响应式引用。想让页面随 Esc 等操作更新,请使用 callback 同步 Vue 状态,或使用组件的 v-model。

ApiOptions ​

选项类型默认值说明
pageOnlybooleanfalse网页全屏
teleportbooleanfalse移动到 body;目标是 body 时自动关闭
fullscreenClassstring'fullscreen'激活时添加,退出时恢复
callback(isFullscreen: boolean) => void无状态变化回调

还可以按需导入 screenfull,它是底层原生全屏工具;直接使用它不会执行本库的网页全屏、样式和 teleport 管理。

基于 MIT 许可发布