当前位置:首页 > VUE

vue实现全屏事件

2026-03-29 02:30:35VUE

监听全屏状态变化

使用 document 的全屏相关事件监听全屏状态变化:

document.addEventListener('fullscreenchange', handleFullscreenChange);
document.addEventListener('webkitfullscreenchange', handleFullscreenChange);
document.addEventListener('mozfullscreenchange', handleFullscreenChange);
document.addEventListener('MSFullscreenChange', handleFullscreenChange);

function handleFullscreenChange() {
  const isFullscreen = document.fullscreenElement || 
                      document.webkitFullscreenElement || 
                      document.mozFullScreenElement || 
                      document.msFullscreenElement;
  console.log('全屏状态:', isFullscreen ? '已全屏' : '已退出全屏');
}

进入全屏模式

为特定元素触发全屏,需处理不同浏览器的前缀:

vue实现全屏事件

function enterFullscreen(element) {
  if (element.requestFullscreen) {
    element.requestFullscreen();
  } else if (element.webkitRequestFullscreen) {
    element.webkitRequestFullscreen();
  } else if (element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
  } else if (element.msRequestFullscreen) {
    element.msRequestFullscreen();
  }
}

// 示例:点击按钮全屏
<button @click="enterFullscreen(document.documentElement)">全屏</button>

退出全屏模式

统一处理不同浏览器的退出逻辑:

vue实现全屏事件

function exitFullscreen() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if (document.msExitFullscreen) {
    document.msExitFullscreen();
  }
}

检测当前全屏状态

通过兼容性写法获取当前全屏元素:

function isFullscreen() {
  return !!(
    document.fullscreenElement ||
    document.webkitFullscreenElement ||
    document.mozFullScreenElement ||
    document.msFullscreenElement
  );
}

Vue组件封装示例

封装可复用的全屏功能组件:

<template>
  <div>
    <button @click="toggleFullscreen">
      {{ isFullscreen ? '退出全屏' : '进入全屏' }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isFullscreen: false
    };
  },
  mounted() {
    this.addEventListeners();
  },
  beforeDestroy() {
    this.removeEventListeners();
  },
  methods: {
    addEventListeners() {
      document.addEventListener('fullscreenchange', this.handleFullscreenChange);
      document.addEventListener('webkitfullscreenchange', this.handleFullscreenChange);
      // 其他前缀事件...
    },
    removeEventListeners() {
      document.removeEventListener('fullscreenchange', this.handleFullscreenChange);
      // 其他前缀事件...
    },
    handleFullscreenChange() {
      this.isFullscreen = !!(
        document.fullscreenElement ||
        document.webkitFullscreenElement
        // 其他前缀检测...
      );
    },
    toggleFullscreen() {
      if (this.isFullscreen) {
        this.exitFullscreen();
      } else {
        this.enterFullscreen(document.documentElement);
      }
    },
    enterFullscreen(element) {
      // 实现同前文
    },
    exitFullscreen() {
      // 实现同前文
    }
  }
};
</script>

注意事项

  • 全屏API必须在用户交互(如点击事件)中触发,否则会被浏览器阻止
  • 部分移动端浏览器可能不支持全屏API
  • 全屏状态下CSS可通过 :fullscreen 伪类定制样式
  • 建议在组件销毁时移除事件监听,避免内存泄漏

标签: 全屏事件
分享给朋友:

相关文章

vue实现事件监听

vue实现事件监听

Vue 事件监听实现方法 Vue 提供了多种方式实现事件监听,涵盖组件内外交互、原生 DOM 事件处理等场景。以下是核心实现方案: 模板内直接监听 通过 v-on 或 @ 语法监听 DOM 事件:…

h5实现全屏

h5实现全屏

全屏 API 的基本使用 HTML5 提供了 requestFullscreen API 来实现全屏功能。现代浏览器都支持这一特性,但不同浏览器可能需要添加前缀。 // 触发全屏 function…

vue实现tap事件

vue实现tap事件

Vue 中实现 Tap 事件的方法 在 Vue 中实现类似移动端的 tap 事件(轻触),可以通过原生事件或第三方库实现。以下是几种常见方法: 使用 @click 模拟 Tap 事件 移动端浏览器通…

vue实现点击全屏

vue实现点击全屏

实现点击全屏功能 在Vue中实现点击全屏功能可以通过浏览器的Fullscreen API完成。以下是一个完整的实现方案: 安装screenfull依赖 Screenfull是一个跨浏览器的全屏API…

vue实现鼠标移入事件

vue实现鼠标移入事件

鼠标移入事件的基本实现 在Vue中实现鼠标移入事件可以通过v-on指令或@简写绑定mouseenter或mouseover事件。两者的区别在于事件冒泡机制: mouseenter:不会冒泡,仅在鼠标…

vue 实现全屏弹层

vue 实现全屏弹层

实现全屏弹层的基本思路 使用 Vue 实现全屏弹层需要结合 CSS 定位和 Vue 的组件化特性。弹层通常需要覆盖整个视口,并置于其他内容之上。 HTML 结构示例 在 Vue 模板中,弹层通常是一…