IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue项目中监听全屏事件,实现全屏功能和按esc退出全屏(解决全屏踩坑难题) -> 正文阅读

[JavaScript知识库]Vue项目中监听全屏事件,实现全屏功能和按esc退出全屏(解决全屏踩坑难题)

展示效果:
在这里插入图片描述
在这里插入图片描述

全屏功能

代码:

      <el-button
                  type="button"
                  id="full-btn-medium"
                  @click="VideoFullScreen"
                  size="medium"
                  title="全屏显示"
                >
                  全屏
       </el-button
   VideoFullScreen() {
   // 获取要全屏的组件节点
      var element = this.$refs["mediaPlayers"].$el;
   // 异步发起全屏请求 适配多浏览器全屏事件 为火狐 谷歌 ie safari
   // requestFullscreen() 方法用于发出异步请求使元素进入全屏模式 但并不保证元素一定能够进入全屏模式
   // 因此需要进行适配多方法
      var requestMethod =
        element.requestFullScreen ||
        element.webkitRequestFullScreen ||
        element.mozRequestFullScreen ||
        element.msRequestFullScreen;
      if (requestMethod) {
      // 如果全屏请求通过需要改变返回的fullscreenchange事件失效,因此重新指向this
        requestMethod.call(element);
      } else if (typeof window.ActiveXObject !== "undefined") { // 这里本意是对ie的全屏活动做适配
       // 调用ie游览器工具
        var wscript = new ActiveXObject("WScript.Shell");
        // 如果本地程序不存在,则对ie执行F11全屏事件
        if (wscript !== null) {
          wscript.SendKeys("{F11}");
        }
      }

    },

全屏后类名

全屏事件会改变元素的宽高 因此未需要提供修改样式的伙伴提供全屏伪类

  		:-webkit-full-screen {
          /* properties */
        }
 
        :-moz-full-screen {
          /* properties */
        }
 
        :-ms-fullscreen {
          /* properties */
        }
 
        :full-screen { /*pre-spec */
          /* properties */
        }
 
        :fullscreen { /* spec */
          /* properties */
        }

退出全屏事件

exitFullscreen() {
// 同样的思路
var element = this.$refs["mediaPlayers"].$el;
  if (element .exitFullscreen) {
    element .exitFullscreen();
  } else if (element .msExitFullscreen) {
    element .msExitFullscreen();
  } else if (document.mozCancelFullScreen) {
    element .mozCancelFullScreen();
  } else if (document.webkitExitFullscreen) {
    element .webkitExitFullscreen();
  }
}

用户手动按下ESC键或F11键,也可以退出全屏键。此外,加载新的页面,或者切换tab,或者从浏览器转向其他应用(按下Alt-Tab),也会导致退出全屏状态。

fullscreenchange事件

全屏事件结束后可能会出现样式错乱情况:我们可以见监听fullscreenchange事件来解决
fullscreenchange:当浏览器进入或离开全屏时触发。
同时:requestFullScreen方法执行后也会返回fullscreenchange事件

// 
    document.addEventListener("fullscreenchange", () => {
      if (that.isFullScren) {
        this.$nextTick(() => {
     // 这里对全屏后样式进行操作
        });
      }
      that.isFullScren = !that.isFullScren;
    });

判断是否全屏

但是有可能监听不到全屏事件改变
我们可以使用fullscreenEnabled 来判断是否进入全屏

var fullscreenEnabled =
  document.fullscreenEnabled ||
  document.mozFullScreenEnabled ||
  document.webkitFullscreenEnabled ||
  document.msFullscreenEnabled;

if (fullscreenEnabled) {
  videoElement.requestFullScreen();
} else {
  console.log('浏览器当前不能全屏');
}

PS:Failed to execute ‘requestFullscreen’ on ‘Element’: API can only be initiated by a user gesture.
如果控制台出现了以上提示
在"Element"上执行"requestFullscreen"方法失败,javascript API仅允许通过手势去创建!(即没有权限)
大多数是希望在浏览器在自启动之后就自动触发全屏模式。浏览器阻止了这类行为因此需要寻找它方式实现。

全屏的两种状态

requestFullscreen 全屏API
在这里插入图片描述
浏览器F11全屏
在这里插入图片描述
由此很明显地发现浏览器自带的全屏行为只是把任务栏顶部隐藏
而requestFullscreen 将需要全屏的dom元素给全屏了
因此再出现某些关于F11全屏的问题时可以通过isFullscreen这个方法在判断他的布尔值

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

全屏则返回当前调用全屏的元素,不全屏返回false

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:01:20  更:2022-06-25 18:01:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:02:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码