视频全屏弹幕实现

该文章短小精悍
问?视频全屏后如何加弹幕
答:了解一下 screenfull; pointer-events: none;
(如果你没有领会我的意思,我可以手摸手带你撸一遍)

图片描述

  1. 视频全屏遇到的问题
    最近在搞给视频加个花边的东西用的 Flash,在全屏的时候浏览器会把视频层级提高(H5也有同样的问题),(重点是 Flash 并不草理你的DOM,大家玩玩就懂我的意思了。)导致全屏后通过position定位的花边位于了视频下方,简单的说花边在视频全屏的时候不展示
  2. 处理问题的过程
    最开始用的是非常常规的想法,如何在视频全屏的时候降低视频的层级,使我需要的div块位于视频上方。然后尝试了各种方法,结果被制裁的服服帖帖的,大家可以去搞搞。其实仔细思考我要做的就是类似于弹幕的东西,咦~~B站怎么实现的。
  3. 别人家的弹幕
    B站肯定是拿不到源码的啦,缕他控制台的资源,element,style。人家确实全屏的时候实现了,弹幕
    写的DOM结构,和CSS样式并不复杂,全屏无外乎全屏的时候给DOM加了一个样式而已。我也照着试了不行。

WEY?
图片描述

4.错在了哪里

这个问题如果思路错了就是个死胡同。所以我在找问题的时候趟了很多坑。思路错在我不应该使用视频的全屏,敲黑板!划重点啦!不要使用视频的全屏!(解决了问题的时候才幡然醒悟),然后发现了个贼有意思的东西。[screenfull][3]。不知道B站他们怎么玩的,但是我用这个实现了。这个东西做了一个事情让你浏览器的DOM铺满全屏。欧?~~~

5 实现它
DOM

<div class='player' id='vb'>
    <video id='vd' playsinline webkit-playsinline="true" controls style='object-fit: contain;'>
      <source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4" />
    </video> 
    <div class='video-status' id='log'>
      <img src="http://wx4.sinaimg.cn/large/006ARE9vgy1fs9w9ukwjhj30g40afaap.jpg" alt="">
    </div>
  </div>

Script

<script src="https://cdn.bootcss.com/screenfull.js/4.1.0/screenfull.js"></script>
<script>
  const log = document.getElementById('log')
  const videoBox = document.getElementById('vb')
  log.onclick = _=> {
    const fullFlag = videoBox.className.indexOf('full-screen')
    if (fullFlag === -1) {
      videoBox.setAttribute('class', 'player full-screen')
    } else {
      videoBox.setAttribute('class', 'player')
    }
    screenfull.toggle()
  }
</script>

CSS

<style>
/* reset */
html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu{margin:0;padding:0;}
header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block;}
table{border-collapse:collapse;border-spacing:0;}
caption,th{text-align:left;font-weight:normal;}
html,body,fieldset,img,iframe,abbr{border:0;}
i,cite,em,var,address,dfn{font-style:normal;}
[hidefocus],summary{outline:0;}
li{list-style:none;}
h1,h2,h3,h4,h5,h6,small{font-size:100%;}
sup,sub{font-size:83%;}
pre,code,kbd,samp{font-family:inherit;}
q:before,q:after{content:none;}
textarea{overflow:auto;resize:none;}
label,summary{cursor:default;}
a,button{cursor:pointer;}
h1,h2,h3,h4,h5,h6,em,strong,b{font-weight:bold;}
del,ins,u,s,a,a:hover{text-decoration:none;}
body,textarea,input,button,select,keygen,legend{font:12px/1.14 arial,\5b8b\4f53;color:#333;outline:0;}
body{background:#fff;}
a,a:hover{color:#333;}

.player {
  width: 800px;
  height: auto;
  margin: 0 auto;
  position: relative;
  background-color: black;
}
.player video{
  width: 100%;
  height: 100%;
}
.video-status {
  position: absolute;
  right: 100px;
  top: 40px;
}
.video-status img {
  width: 100px;
}
.full-screen {
  position: fixed;
  width: 100%;
  height: 100%;
}
</style>

去我的代码里找你需要的东西吧。

图片描述

6.pointer-events是啥?弹幕呢?

pointer-events 是一个CSS属性做点透的时候用的,如果你有一个弹幕层在Video上边你会需要到她的。弹幕呢,没有。好多人都已经实现了好不好,这个你还是去问问[百度][5]或者[必应][6]吧。

GitHub 地址 https://github.com/Gao-Fan/vi...

风萧萧兮,易水寒,壮士一去兮,不复还。

4 声望
2 粉丝
0 条评论
推荐阅读
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...

wuwhs40阅读 4.8k评论 5

封面图
ESlint + Stylelint + VSCode自动格式化代码(2023)
安装插件 ESLint,然后 File -&gt; Preference-&gt; Settings(如果装了中文插件包应该是 文件 -&gt; 选项 -&gt; 设置),搜索 eslint,点击 Edit in setting.json

谭光志34阅读 20.7k评论 9

安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...

边城31阅读 7.3k评论 5

封面图
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco22阅读 2.2k评论 3

你可能不需要JS!CSS实现一个计时器
CSS现在可不仅仅只是改一个颜色这么简单,还可以做很多交互,比如做一个功能齐全的计时器?样式上并不复杂,主要是几个交互的地方数字时钟的变化开始、暂停操作重置操作如何仅使用 CSS 来实现这样的功能呢?一起...

XboxYan23阅读 1.7k评论 1

封面图
在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 2k

封面图
过滤/筛选树节点
又是树,是我跟树杠上了吗?—— 不,是树的问题太多了!🔗 相关文章推荐:使用递归遍历并转换树形数据(以 TypeScript 为例)从列表生成树 (JavaScript/TypeScript) 过滤和筛选是一个意思,都是 filter。对于列表来...

边城18阅读 7.8k评论 3

封面图

风萧萧兮,易水寒,壮士一去兮,不复还。

4 声望
2 粉丝
宣传栏