vue实现组件全屏展示
使用浏览器原生全屏 API
在 Vue 中可以通过调用浏览器的原生全屏 API 实现组件全屏。需要监听用户交互事件(如点击)才能触发全屏,浏览器出于安全考虑禁止自动全屏。
// 在组件方法中实现全屏逻辑
toggleFullscreen() {
const element = this.$el // 获取组件根DOM元素
if (!document.fullscreenElement) {
element.requestFullscreen().catch(err => {
console.error(`全屏错误: ${err.message}`)
})
} else {
document.exitFullscreen()
}
}
使用第三方库 vue-fullscreen
vue-fullscreen 提供了更简单的 Vue 集成方式:
// 安装后全局注册
import VueFullscreen from 'vue-fullscreen'
Vue.use(VueFullscreen)
// 组件中使用
<template>
<button @click="toggle">全屏切换</button>
<div v-fullscreen="isFullscreen" class="fullscreen-content">
<!-- 内容 -->
</div>
</template>
<script>
export default {
data() {
return { isFullscreen: false }
},
methods: {
toggle() {
this.isFullscreen = !this.isFullscreen
}
}
}
</script>
样式适配全屏模式
全屏时需要特别处理样式以确保内容正确显示:
.fullscreen-content {
width: 100vw;
height: 100vh;
background: white;
overflow: auto;
}
/* 全屏状态下的特殊样式 */
:fullscreen .fullscreen-content {
background: #f0f0f0;
}
处理浏览器兼容性
不同浏览器需要前缀处理:
function enterFullscreen(element) {
if (element.requestFullscreen) {
return element.requestFullscreen()
} else if (element.webkitRequestFullscreen) {
return element.webkitRequestFullscreen()
} else if (element.msRequestFullscreen) {
return element.msRequestFullscreen()
}
}
全屏状态监听
通过事件监听全屏状态变化:
mounted() {
document.addEventListener('fullscreenchange', this.handleFullscreenChange)
},
beforeDestroy() {
document.removeEventListener('fullscreenchange', this.handleFullscreenChange)
},
methods: {
handleFullscreenChange() {
this.isFullscreen = !!document.fullscreenElement
}
}
移动端特殊处理
移动设备可能需要额外处理:
// 检测设备类型
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
// 移动端可能需要横屏提示
if (isMobile && this.isFullscreen) {
screen.orientation.lock('landscape').catch(() => {})
}






