• video 全屏弹幕被遮盖问题


    需求说明:使用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实验一下=。=

  • 相关阅读:
    文档的几何形状和滚动
    聊聊并发——生产者消费者模式
    在JavaScript中什么时候使用==是正确的?
    HTML5使用canvas画图时,图片被自动放大模糊的问题
    获取元素的几种方式
    利用jQuery和CSS实现环形进度条
    最实用、最常用的jQuery代码片段
    表格样式
    javascript常量的定义
    null 和 undefined 的区别
  • 原文地址:https://www.cnblogs.com/liangziaha/p/15905758.html
Copyright © 2020-2023  润新知