需求说明:使用video.js播放视频,要求点击全屏按钮的时候,弹幕可以跟视频一起全屏。
看起来是个很简单的需求,直觉上只要在全屏后,只要让弹幕的z-index
高过全屏的视频不就可以了吗。
但是实际上,全屏的元素层级似乎是最高的,用z-index
无法实现弹幕在全屏视频上出现的效果。
使用requestFullScreen, exitFullscreen, fullscreenchange事件实现全屏效果
Element.requestFullscreen()
可以实现div元素的全屏,那么只要把弹幕和<video>标签放在同一个父div里,就可以实现全屏时弹幕在<video>上的效果了:
<div class="playerLive"> <video></video> <canvas class="danmu"></canvas> </div>
const playerLive = document.querySelector('playerLive'); videoWrapper.requestFullscreen();
只要在父元素下,弹幕的层级比<video>高,弹幕在视频上方的效果就能实现了。
不过,在使用的过程中需要注意,requestFullscreen
使用时需要加上webkit,ms,moz等浏览器前缀,解决浏览器的兼容问题:
if (playerLive.requestFullscreen) { return playerLive.requestFullscreen(); } else if (playerLive.webkitRequestFullScreen) { return playerLive.webkitRequestFullScreen(); } else if (playerLive.mozRequestFullScreen) { return playerLive.mozRequestFullScreen(); } else (playerLive.msRequestFullscreen) { playerLive.msRequestFullscreen(); }
而且,Element.requestFullscreen()
在IE只支持IE11+。
document.exitFullscreen()
可以让当前页面内退出全屏模式,要注意的是这个api是在document上,不需要是全屏的那个元素。
fullscreenchange
事件可以监听页面的全屏状态,页面全屏/退出全屏都能触发fullscreenchange
事件。同样需要给监听事件添加浏览器前缀。
因为video.js已经自带了一个全屏按钮,这里自己想办法隐藏调或者自己写一个控制器。
作者:般犀
链接:https://www.jianshu.com/p/4ecc3e285c29
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
浏览器全屏实现方式
1.利用h5的 requestFullScreen
2.摁F11实现全屏效果
requestFullscreen全屏具体实现
1.进入全屏
function full(ele) { if (ele.requestFullscreen) { ele.requestFullscreen(); } else if (ele.mozRequestFullScreen) { ele.mozRequestFullScreen(); } else if (ele.webkitRequestFullscreen) { ele.webkitRequestFullscreen(); } else if (ele.msRequestFullscreen) { ele.msRequestFullscreen(); } }
ele
:要全屏的元素,可以是document.body
也可以是某一个div
思路:
1.判断该浏览器是否具有requestFullscreen
方法
2.有,则直接执行ele.requestFullscreen()
;没有则做浏览器兼容判断。
2.exitFullScreen退出全屏
function exitFullscreen() { if(document.exitFullScreen) { document.exitFullScreen(); } else if(document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if(document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if(document.msExitFullscreen) { document.msExitFullscreen(); } }
退出全屏直接使用document
调用exitFullscreen
方法即可。
3.获取当前全屏的节点
function getFullscreenElement() { return ( document.fullscreenElement || document.mozFullScreenElement || document.msFullScreenElement || document.webkitFullscreenElement||null ); }
document.fullscreenElement()
:获取当前全屏的元素。
假设id为div1的Element当前为全屏状态则 document.querySelector("#div1")===document.fullscreenElement
4.判断当前是否全屏
function isFullScreen() { return !! ( document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.webkitFullScreen || document.msFullScreen ); }
5.判断当前文档是否能切换到全屏
function isFullscreenEnabled() { return ( document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled ); }
注意事项:
1.document
下没有requestFullscreen
2.requestFullscreen
方法只能由用户触发,比如:在onload
事件中不能触发
3.页面跳转需先退出全屏
4.进入全屏的元素,将脱离其父元素,所以可能导致之前某些css的失效
解决方案:使用 :full-screen
伪类 为元素添加全屏时的样式(使用时为了兼容注意添加-webkit、-moz或-ms前缀)
5.一个元素A全屏后,其子元素要再全屏,需先让元素A退出全屏
作者:皮卡丘_小面包
链接:https://www.jianshu.com/p/54729c73686a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
后续自己写一个视频弹幕的demo实验一下=。=