vue3点击按钮实现全屏和取消全屏效果

本文介绍了在Chrome浏览器中fullscreenchange事件的不一致性和如何通过resize事件检测全屏状态。同时,针对F11键无法正常退出全屏的问题,提出用keydown事件取消F11默认行为并使用自定义方法解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现的问题1:用fullscreenchange监听全屏状态的改变时,发现在Chrome浏览器中,无法正确触发该事件,这个问题是由于Chrome浏览器的缺陷引起的。Chrome使用了Webkit引擎,在处理全屏模式时存在一些不一致性。具体来说,Chrome没有正确地实现fullscreenchange事件

解决办法:用resize替换,监听页面的resize事件,根据页面高度是否等于全屏高度判断是否处于全屏状态,具体代码如下:

<template>
   <el-button type="primary" @click="screen">{{ fullscreenText }}</el-button>
</template>
const fullscreen = ref(false)
const fullscreenText = ref('全屏')
if (window.innerHeight === window.screen.height) {
//判断初始化后,是否处于全屏状态
  fullscreen.value = true
  fullscreenText.value = '取消全屏'
}
onMounted(() => {
  //监听页面是否全屏,fullscreen为true代表全屏状态,
  window.addEventListener('resize', () => {
    if (window.innerHeight === window.screen.height) {
      //全屏
      fullscreen.value = true
      fullscreenText.value = '取消全屏'
    } else {
      fullscreen.value = false
      fullscreenText.value = '全屏'
    }
  })
})

具体点击全屏的代码:


const screen = () => {
  let element = document.documentElement;
  if (fullscreen.value) {
//退出全屏操作
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.webkitCancelFullScreen) {
      document.webkitCancelFullScreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    }
    fullscreenText.value = '全屏'
  } else {
//全屏操作
    if (element.requestFullscreen) {
      element.requestFullscreen();
    } else if (element.webkitRequestFullScreen) {
      element.webkitRequestFullScreen();
    } else if (element.mozRequestFullScreen) {
      element.mozRequestFullScreen();
    } else if (element.msRequestFullscreen) {
      // IE11
      element.msRequestFullscreen();
    }
    fullscreenText.value = '取消全屏'
  }
//全屏状态取反
  fullscreen.value = !fullscreen.value;
}

 出现的问题2:通过按钮点击进入的全屏,不能通过键盘F11退出,相反,通过键盘F11进入的全屏,也不能通过按钮点击退出,

解决方法:通过监听keydown事件,取消F11按钮默认事件,用js按钮点击方法代替,代码如下:

//解决按F11实现的全屏,用api不能退出问题,
//之前窗口对象window不能监听到keydowm事件,最好用文档对象document代替
document.addEventListener('keydown', e => {
  e = e || window.event
  if (e.keyCode === 122) {
    //取消f11按钮,用screen方法替代
    e.preventDefault()
    screen()
  }
})

### Vue3实现点击视频播放按钮全屏播放功能 在 Vue3 的项目中,可以通过 `ref` 获取 DOM 元素,利用 HTML5 提供的全屏 API 来实现点击视频播放按钮后进入全屏播放的功能。以下是具体的实现方法: #### 1. 使用 `<script setup>` 创建响应式状态函数 通过 `ref` 创建对视频元素的引用以及控制逻辑的状态变量。 ```javascript <script setup> import { ref } from &#39;vue&#39;; // 定义视频源地址 const videoSrc = "https://example.com/sample.mp4"; // 响应式状态 const isPlaying = ref(false); const isFullscreen = ref(false); // 获取视频元素的引用 const videoRef = ref(null); // 切换播放/暂停 function togglePlay() { const videoElement = videoRef.value; if (videoElement.paused || videoElement.ended) { videoElement.play(); isPlaying.value = true; } else { videoElement.pause(); isPlaying.value = false; } } // 进入或退出全屏模式 function toggleFullscreen() { const videoElement = videoRef.value; if (!document.fullscreenElement) { // 请求全屏 if (videoElement.requestFullscreen) { videoElement.requestFullscreen().catch(err => console.error(`Error attempting to enable fullscreen mode: ${err.message} (${err.name})`)); } } else { // 退出全屏 if (document.exitFullscreen) { document.exitFullscreen(); } } isFullscreen.value = !isFullscreen.value; } </script> ``` #### 2. 模板部分定义视频组件交互按钮 使用 `<video>` 标签加载视频资源,绑定事件处理程序到按钮上。 ```html <template> <div class="video-container"> <!-- 视频 --> <video ref="videoRef" :src="videoSrc" controls muted></video> <!-- 控制按钮 --> <button @click="togglePlay">{{ isPlaying ? &#39;Pause&#39; : &#39;Play&#39; }}</button> <button @click="toggleFullscreen">{{ isFullscreen ? &#39;Exit Fullscreen&#39; : &#39;Enter Fullscreen&#39; }}</button> </div> </template> ``` #### 3. 添加样式优化布局 为了使界面更加美观,可以添加一些基础样式调整容器大小居中显示。 ```css <style scoped> .video-container { display: flex; justify-content: center; align-items: center; flex-direction: column; } video { width: 80%; max-width: 720px; margin-bottom: 20px; } button { padding: 10px 20px; font-size: 16px; cursor: pointer; border-radius: 5px; background-color: #007bff; color: white; border: none; transition: all 0.3s ease-in-out; } button:hover { background-color: #0056b3; } </style> ``` 以上代码实现了基本的全屏播放功能[^1],通过 `requestFullscreen()` 方法调用了浏览器原生支持的全屏接口[^2]。 --- #### 注意事项 - 如果目标设备不支持全屏 API,则需要提供降级方案或者提示用户手动操作。 - 对于移动端开发需要注意兼容性问题,因为某些平台可能限制 JavaScript 调用硬件级别的全屏行为。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值