跳转到内容

指令 ​

无需维护模型状态,点击绑定的按钮即可切换指定区域。

本页参考

完整的绑定值、修饰符和选项见指令参考。

局部使用 ​

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

const error = ref('')
</script>

<template>
  <button
    v-fullscreen.pageOnly.teleport="{ target: '#report' }"
    @fullscreen-error="error = $event.detail.message"
  >
    切换报表全屏
  </button>
  <section id="report">
    <h2>报表</h2>
    <p>按 Esc 退出,或在实际业务中加入退出按钮。</p>
  </section>
  <p v-if="error" role="alert">{{ error }}</p>
</template>

普通 setup() 或 Options API 中,在组件的 directives 选项里用 fullscreen: vFullscreen 局部注册。

三种绑定形式 ​

vue
<!-- 不传参数:控制 document.body -->
<button v-fullscreen>整个页面全屏</button>

<!-- 字符串:CSS 选择器 -->
<button v-fullscreen="'#report'">报表全屏</button>

<!-- 对象:目标与配置 -->
<button v-fullscreen="{ target: '#report', pageOnly: true, teleport: true }">
  网页全屏
</button>

target 还支持 HTML 元素、Vue ref、组件实例(使用 $el)和 getter,进入全屏时解析当前目标。直接传入的字符串按 CSS 选择器处理,id 应写成 '#report'。

无法解析目标时触发 fullscreen-error。省略 target 或直接传入 null 时使用 document.body。

修饰符与选项 ​

.pageOnly 和 .teleport 对应同名配置。对象中的显式选项优先于修饰符。例如 .pageOnly="{ pageOnly: false }" 最终使用原生模式。

对象还支持 fullscreenClass 与 callback(isFullscreen)。在全屏目标内部也绑定同一指令,即可作为退出按钮;开启会话的指令卸载时自动清理。

捕获失败 ​

指令通过原生冒泡事件 fullscreen-error 报告失败,错误对象在 event.detail。它不是组件的 error 事件。

js
button.addEventListener('fullscreen-error', (event) => {
  console.error(event.detail)
})

如果按钮在全屏目标外面,原生全屏时可能看不到它。请在目标内部提供退出按钮,或让用户使用 Esc。

参考 ​

ts
interface DirectiveOptions extends ApiOptions {
  target?: FullscreenTarget
}
选项类型默认值说明
targetFullscreenTargetdocument.body目标;直接传入的字符串按 CSS 选择器解析
pageOnlybooleanfalse网页全屏
teleportbooleanfalse移动到 body;目标是 body 时自动关闭
fullscreenClassstring'fullscreen'激活时添加,退出时恢复
callback(isFullscreen: boolean) => void无状态变化回调

基于 MIT 许可发布