相关链接:

  • H5 video 的使用
  • H5 video开发问题及相关知识点

由于全屏播放在移动web上的兼容问题,尤其是在iOS上,让全屏本应该比较简单的操作,根据业务的需求,有时候会有些复杂。这里查看原生全屏相关API

使用全屏的方式有两个,一个是模拟全屏,一个是web原生的;
模拟全屏的好处是可以自定义相关控件,以达到统一多端样式的目的,并可以在全屏模式下做很多自定义的操作;缺点是,在移动端需要终端支持,且需要处理兼容问题,安卓问题多些。
原生全屏相对比较方便,处理起来会比较轻松,缺点是全屏后,几乎不能做什么干预,且iOS存兼容问题,主要表现为onwebkitfullscreenchange在iOS上无法监听到,感知不到全屏状态变化,另外对当前全屏元素的标识的API支持也有问题。
iOS、安卓 全屏的相关属性、方法的支持情况可以参考下表
可以看出,iOS对document 对象关于全屏的属性几乎都不支持(在图示版本中),使用原生全屏功能的进入全屏后,iOS上能判断是否处于全屏状态的只有通过定时器监听webkitDisplayingFullscreen/ webkitPresentationMode两个值的状态。

而安卓上,webkitDisplayingFullscreen存在问题,可以监听document.onwebkitfullscreenchange,并通过event对象的srcElement是否为当前video DOM对象来结合webkitIsFullScreen来判断当前video是否处于全屏状态。

出于以上情况,进入全屏(移动端web)和全屏状态检测兼容代码整理如下:
// 进入全屏
if (video.requestFullscreen) {// 最新标准video.requestFullscreen();
} else if (video.webkitRequestFullscreen) {video.webkitRequestFullscreen();
} else {// iOS进入全屏video.webkitEnterFullscreen();// 针对iOS监听不到webkitfullscreenchange事件做的兼容,感知退出全屏let timer = setInterval(() => {if (!video.webkitDisplayingFullscreen) {// 退出了全屏clearInterval(timer);}}, 1000);
}// 状态判断,PC Chrome
document.addEventListener('webkitfullscreenchange', (evt) => {if (!video.webkitDisplayingFullscreen) {// 退出全屏}
}, false);// 全屏状态改变事件,Android
document.addEventListener('webkitfullscreenchange', (evt) => {if (!document.webkitIsFullScreen && evt.srcElement === video) {// 退出全屏}
}, false);复制代码
全屏相关属性的兼容性验证(看打印日志):
 const video = document.querySelector('#video');console.log('document.onfullscreenchange: ', 'onfullscreenchange' in document)console.log('document.onwebkitfullscreenchange: ', 'onwebkitfullscreenchange' in document);            console.log('document.webkitExitFullscreen: ', 'webkitExitFullscreen' in document)console.log('\n');console.log('document.webkitCurrentFullScreenElement: ', document.webkitCurrentFullScreenElement);console.log('document.webkitFullscreenElement: ', document.webkitFullscreenElement);console.log('document.webkitIsFullScreen: ', document.webkitIsFullScreen);console.log('document.webkitFullscreenEnabled: ', document.webkitFullscreenEnabled);console.log('\n');console.log('video.onwebkitfullscreenchange: ', 'onwebkitfullscreenchange' in video)console.log('video.webkitExitFullscreen: ', 'webkitExitFullscreen' in video)console.log('video.displayingFullscreen: ', video.webkitDisplayingFullscreen);console.log('video.webkitSupportsFullscreen: ', video.webkitSupportsFullscreen);
复制代码

转载于:https://juejin.im/post/5cdae530f265da03973ad0b5

h5 video全屏播放相关推荐

  1. Video 全屏播放、禁止拖动进度条、禁止下载

    ​ 全屏播放 ios:默认全屏播放模式,不做处理: 安卓:默认小屏播放模式,特殊处理,以下是实现代码: /** * @description 安卓全屏播放模式 * @video DOM节点 */ fu ...

  2. Chromium为视频标签 video 全屏播放的过程分析

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Chr ...

  3. Chromium为视频标签video全屏播放的过程分析

    在Chromium中,<video>标签有全屏和非全屏两种播放模式.在非全屏模式下,<video>标签播放的视频嵌入在网页中显示,也就是视频画面作为网页的一部分显示.在全屏模式 ...

  4. 关于html5 video全屏+自定义控制器

    最近整了台nas机,准备自己写个视频网站搭建家庭媒体服务.临时记录下h5 video全屏+自定义控制器的实现的方式,之后会针对实现完整的h5 video播放控制写一些介绍和遇到的坑. video标签中 ...

  5. (已解决)video标签在ios端默认全屏播放(h5开发)

    Video在ios全屏播放 这两天一直在做h5开发,项目马上完结,就是到最后项目上线之后,在ios上面测试,突然发现原来的视频默认全屏播放,这样就有很大的限制,很不利于开发,我这边是已经解决这个问题了 ...

  6. uniapp 判断页面是否是横竖屏,解决微信小程序video组件全屏播放视频遮盖自定义播放控件问题

    如果res.deviceOrientation 等于landscape 的话是竖屏,portrait则是横屏.因为用户每旋转一次屏幕就会触发里面的onShow钩子,因此在页面显示或横竖屏变化都会触发这 ...

  7. html5微信视频禁止自动全屏,关于HTML5 video标签在安卓版微信浏览器内被强行全屏播放的问题...

    最近在一个H5项目中,碰到了传说中的video标签在安卓版微信浏览器内被强行全屏播放问题.原计划在视频播放完毕后,页面出现video的ended事件时,应该显示分享和处于转化页的按钮,如图: 然而在这 ...

  8. 记一次微信H5全屏播放视频的总结

    一.H5场景介绍 需求:在微信里打开一个H5页面,然后点击按钮全屏播放视频,等视频播放完成后,在视频上显示一个跳转按钮,点击按钮跳转到其他的页面. 二.遇到的问题 1.IOS设备微信上,视频不能预加载 ...

  9. Html5原生video标签禁止全屏播放的实现

    制作移动端H5,需要添加视频,点击播放的时候会自动全屏播放,记录一下处理局部播放的问题. <video id="pageVideo"x5-playsinline=" ...

最新文章

  1. 十进制 转换为 二进制
  2. ARP***原理与解决方法《一》
  3. 【Karma】多环境自动测试框架 -- 基础教程
  4. IE新0day漏洞(979352)(又称极光零日漏洞)***将扩散
  5. 【数据结构与算法】数组与链表
  6. 软件工程六大设计原则总结,案例演示
  7. VC RichEdit插入表格(RTF形式)
  8. 数字化转型 数字分析_数字化转型的人员问题
  9. Mysql utf8 和utf8mb4 的区别
  10. html页面调用高德地图,html前端使用高德地图入门教程,并在地图上标记位置-Go语言中文社区...
  11. android listview多视图嵌套多视图
  12. ITRF框架转换程序实现的理论
  13. 【年终总结】我的2015
  14. 狂野飙车4java游戏音乐_狂野飙车8赛车背景音乐名称大全
  15. 向量叉乘算子、点乘算子与矩阵运算的关系
  16. 【计算机视觉】Lecture 11:LoG和DoG滤波算子
  17. flutter 保存图片或者视频到相册
  18. python中strip函数和split函数
  19. 将insert语句转化为select语句,进行校验,验证是否插入成功
  20. datagrid 之修改

热门文章

  1. 回溯算法之全排列问题
  2. Java数字匹配的kmp算法
  3. 938. 二叉搜索树的范围和
  4. 递归算法思路以及题目总结(未完待续...)
  5. Python3提示 No module named ‘urlparse‘(解析url)
  6. stat()函数:获取文件状态
  7. C/C++编程操作Redis数据库,hiredis包装redis数据库操作接口及测试(增删改查与连接)
  8. JAVA Web基础6-EL表达式与JSTL标签库
  9. linux C语言多线程库pthread中条件变量的正确用法逐步详解
  10. 常用前端代码资源(转)