展示效果:

全屏功能

代码:

      <el-buttontype="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事件失效,因此重新指向thisrequestMethod.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

Vue项目中监听全屏事件,实现全屏功能和按esc退出全屏(解决全屏踩坑难题)相关推荐

  1. vue输入框输入触发事件_详解.vue文件中监听input输入事件(oninput)

    详解.vue文件中监听input输入事件(oninput) .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变 ...

  2. vue输入框输入触发事件_.vue文件中监听input输入事件oninput详解

    .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变化事件.需求是这页面中,改变input的值,就调用一个事件, ...

  3. vue项目中监听页面刷新和关闭

    在实际开发项目中,有时候我们需要在刷新和关闭时,触发一些功能,那么如何监听到页面的刷新和关闭呢? 1. 在methods中定义事件方法: methods: {beforeunloadFn(e) {co ...

  4. vue项目中 axios请求拦截器与取消pending请求功能 - 年少、 - 博客园

    在开发vue项目中,请求是不可缺少的,在发送请求时常常需要统一处理一些请求头参数等设置与响应事件,这时利用请求拦截器再好不过. 这里以axios请求为例 实现了设置统一请求头添加token, 其中to ...

  5. Node.contains() 报错, vue中监听点击事件,除了点击自己,点击其他地方将自身隐藏

    更新: 添加完整示例: test.vue文件 (点击id为content的p,flag的值不会改变;点击页面的其他地方,flag的值会改变) <template><div class ...

  6. jquery中监听输入框input事件

    1.需求: 01一行的input只读,值=02+03+04 当修改02.03.04中的任何一个输入框时,01中的值就会改变,并等于02/03/04之和 2.解决思路: (1)html: 在02/03/ ...

  7. vue项目中textarea阻止默认换行事件

    需求如下: textarea中,输入回车键时添加分号 分析需求,分下面几步 阻止默认回车换行 获取值并添加分号 <!-- 此处使用了Vue语法中的事件修饰符 keydown.enter --&g ...

  8. vue --- 子组件监听点击事件,接收父组件参数.实现对应跳转

    开始 vue中子组件这一块,有点麻烦.不是说它很难,而是它的传送数据方式,以及和各种前端后端路由混在一起时,如果不清晰很容易就迷茫 下面假设: 路由配置文件为:router.js 父组件为 paren ...

  9. Android Dialog中监听返回键事件

    import android.content.DialogInterface;dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { ...

最新文章

  1. Linux设备文件简介。
  2. AI让交通管理省时、省心、省力
  3. java实现鼠标宏编程_我應該如何編程高級java遊戲中的鼠標/鍵輸入?
  4. spring MVC之返回JSON数据(Spring3.0 MVC+Jackson+AJAX)
  5. tf keras SimpleRNN源码解析
  6. PHP文件上传类及其使用实例教程
  7. 通讯录排序 (20分)_算法入门篇:简单的排序算法
  8. SQL Server CONVERT() 函数,Date 函数
  9. jQuery.validate 中文API
  10. Android中英文单词录入背诵软件
  11. 02: DOM 实例
  12. 通用PHM集成开发环境PIDE
  13. unity-shader 2D - Sprite 影子
  14. android 模拟器目录,Android 获取APP 文件目录 模拟器检测
  15. [Linux]基本体系结构
  16. 如何解决mac拔掉耗电量太大的设备以重新启用usb设备
  17. 查看phpinfo方法
  18. 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
  19. win10 笔记本 突然连不上手机热点了
  20. Nexus中创建仓库时,repository connectors 干嘛的?

热门文章

  1. java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)
  2. lol自动修复连接服务器失败,英雄联盟自动修复的操作方法步骤
  3. python字符串换行的三种方式_Python 字符串换行的多种方式
  4. python selenium刷新页面_python selenium 解决页面刷新后元素找不到问题
  5. 富士通服务器怎么配置u盘装系统,详解富士通电脑u盘重装系统win8教程
  6. javaee 是什么,如何获取各种规范jar包,各种规范的实现的jar包
  7. stack around the variable “” was corrupted
  8. python基础知识学习(2)
  9. Python数据清洗之List去除空格
  10. SAP-ABAP-普通OOALV,OOALV分屏展示,发送邮件excel附件合并单元格,附件带框线,附件居中。