为什么B站中的弹幕可以不遮挡人物

上班逛B站时摸鱼时,看到了满屏的弹幕,而且还不挡脸,突然心血来潮来看看它是怎么实现的?
在这里插入图片描述

不难发现弹幕其实它就是有一个蒙版层div,遮挡在视频组件的上方,z-index层级设置的比较高(这里是11),video标签层级为默认值0,所以这个视频播放的页面是由多个层组成的(当然该页面还有很多其他的layout层,这里不细讲),这一点我们也可以从页面layout分层中也可以直观地看出来:

、

此时又有同学跳出来问。。。。。。
在这里插入图片描述
同学A: ”那它这个不挡脸的弹幕又是如何实现的呢?“

me:这位同学这个问题很好,我们接着看:

me:高端的食材往往需要最崴的厨子 不对… 高端的效果,往往底层原理很简单
废话不多说,我模拟了一个Demo,直接上代码。。。

// index.html文件
<head><meta charset="utf-8" /><link rel="icon" href="%PUBLIC_URL%/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta name="theme-color" content="#000000" /><metaname="description"content="Web site created using create-react-app"/><title>React App</title><style>.back{position: relative;width: 751px;height: 420px;-webkit-mask-image: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKIHdpZHRoPSI3NTAuMjIyMjIyMjIyMjIyMnB4IiBzdHlsZT0idHJhbnNmb3JtOnNjYWxlKDEuMDAxLDEpOyIgaGVpZ2h0PSI0MjJweCIgdmlld0JveD0iMCAwIDMyMC4wMDAwMDAgMTgwLjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwxODAuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjMDAwMDAwIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNMCA5MDUgbDAgLTg5NSAyMzggMCAyMzggMCAyIDYzIGM1IDEzNiA0NiAzNTcgNzggNDE3IDIyIDQzIDU2IDc1IDE0NCAxMzUgOTYKNjUgMTI1IDg3IDE3OCAxMzEgMjAgMTcgNjUgNTAgOTggNzMgbDYxIDQxIDcgNzIgYzMgNDAgOSA5MSAxMiAxMTQgNSAzNyAxIDQ4Ci00MCAxMDggLTI1IDM3IC00NiA3NCAtNDYgODIgMCA4IC0xMSAxOSAtMjQgMjMgLTI4IDExIC0zNiAyOSAtMzYgODAgMCAyMCAtNgo0NSAtMTMgNTYgLTcgMTEgLTIwIDQ2IC0yNyA3OCAtMjQgMTA0IDIwIDIwMSAxMTMgMjQ4IDI4IDE1IDM3IDI2IDM3IDQ0IGwwCjI1IC01MTAgMCAtNTEwIDAgMCAtODk1eiIvPgo8cGF0aCBkPSJNMTU5MCAxNzc5IGMwIC0xMiA3IC0yNyAxNyAtMzQgOSAtNyAxOSAtMzQgMjMgLTYxIDQgLTI3IDE0IC02MyAyMSAtODEgMTAKLTI0IDEwIC00MCAyIC03MCAtMTkgLTY2IC00MyAtMTg3IC00MyAtMjE4IC0xIC0yNyAtNDcgLTIwNiAtNjQgLTI0NiAtNiAtMTMKOSAtMjMgNzMgLTQ5IDEwMSAtNDAgMTA4IC00OCA5MSAtMTAxIC0xNiAtNDYgLTEyIC01MiA1MSAtNjkgMzcgLTEwIDEyMyAtNTMKMTQ4IC03MyAyNiAtMjEgODYgLTExMSAxMTkgLTE3NSAyNiAtNTIgMzIgLTc2IDMyIC0xMjcgMCAtNTkgMyAtNjYgNDEgLTExMQoyMiAtMjcgNDcgLTYyIDU2IC03OSA5IC0xNiAzNSAtNTkgNTggLTk1IDQ5IC03NiA4MyAtMTUwIDc3IC0xNjggLTMgLTkgOTIKLTEyIDQ1MiAtMTIgbDQ1NiAwIDAgODk1IDAgODk1IC04MDUgMCAtODA1IDAgMCAtMjF6Ii8+CjwvZz4KPC9zdmc+Cg==');-webkit-mask-size: 751px 420px;background-color: brown;}.bullet{position: absolute;font-size: 20px;color: #FFFFFF;}</style></head><body><div id="root">23456789</div></body>
</html>
// App.js文件
import Img from './components/video';function App() {return <Img />;
}export default App;
// Img组件
const texts=[{left:140,top:10,text:'UP主好帅'},{left:200,top:430,text:'你难道就是传说中的奶灵'},{left:231,top:70,text:'你好,我是ronychen'},{left:20,top:35,text:'喜欢唱跳rap篮球'},{left:821,top:53,text:'HELLO WORLD'},{left:30,top:121,text:'我是练习时长2年半的练习生'},{left:398,top:321,text:'哈哈哈哈'},{left:190,top:90,text:'我就蹭蹭,不进去'},{left:170,top:200,text:'hahahahahahahahah'},{left:240,top:490,text:'这是什么XXXX'},{left:420,top:340,text:'元芳,你则么看?'},
]
const Img =()=>{return (<div className='back'>{texts.map((item,index)=>(<div key={index} className="bullet" style={{left:`${item.left}px`, top:`${item.top}px`}}>{item.text}</div>))}</div>)
}export default Img;

基本看到这,大部分同学应该都能理解了,其实原理很简单,一张蒙版图 + 一个属性(-webkit-mask-image)就搞定了,实际效果就是这样:
在这里插入图片描述
是不是有种那感觉了

总结
弹幕原理:就如我上面所说,有一个单独的蒙版层div,它会设置一个比视频组件更高的层级值,这样就能显示在视频上方,这里插一句话,在移动端,大多数浏览器貌似都不支持在video标签上放其他内容,在移动端,video标签貌似已经脱离标准文档流,即使你设置再高的z-index值也是不行的,回归主题,至于弹幕不遮挡人物这种效果的实现,我的理解应该是AI算法会实时导出视频中识别到的人物,然后导出这些人物的图片,这点我们可以在network中看到会有实时的图片加载,这些图片就是我们上面要用到的蒙版图,然后再结合css中的-webkit-mask-image属性,就可以实现上述效果,该属性具体的用法可以点击这里查看

至于这一张张的蒙版图片是怎么来的,这块我也不是很清楚,应该是AI算法实时导出的吧! 有兴趣的同学自行了解吧 hahaha。。。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251303.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

B站,牛啊。

本 文 预 计 阅 读 时 间 &#xff1a;7 分钟 老逛是 B站 的忠实用户&#xff0c;同时我还是一个 Up 主。上大学的时候&#xff0c;我就开始玩 B站 了&#xff0c;第一批关注的 Up 主现在很多都已经停更了&#xff0c;比如&#xff1a;微缩电影。 上学期间只是觉得这个平台很有…

B站有哪些可以推荐的学习 up 主?

说到B站&#xff0c;在小九眼里就是宝藏般的存在&#xff0c;放年假宅在家时一天刷6、7个小时不在话下&#xff0c;更别提今年的跨年晚会&#xff0c;我简直是跪着看完的&#xff01;&#xff01; 最早注册B站当然是为了追番&#xff0c;后来经常刷欧美新歌和漂亮小姐姐的舞蹈…

B站 | 我擦!不愧是搞技术的,竟然可以用这种骚操作来提升B站等级~

Hi! 大家好&#xff01;我是小小今天是本周的第五篇&#xff0c;本篇着重的介绍作为一个技术&#xff0c;如何优雅的逛B站 从二次元到娱乐化的B站&#xff0c;已经是国内最受欢迎的视频网站。在上面&#xff0c;所有的人都可以追到自己喜欢的内容。想要学习新技术的同学&#x…

围剿B站

来源&#xff5c;深燃 编辑&#xff5c;李秋涵、魏佳 一年股价翻三倍、最新市值达414.5亿美元、坐拥“Z世代”年轻人&#xff0c;破圈后的B站是这两年视频行业绝对的主角。 1月14日&#xff0c;据媒体报道&#xff0c;B站已经向港交所正式提交上市申请&#xff0c;计划3月在港上…

b站up主是怎么赚钱,b站UP主有哪些赚钱方式,通过什么赚钱?

b站up主是怎么赚钱&#xff0c;b站UP主有哪些赚钱方式&#xff0c;通过什么赚钱&#xff1f; 现在越来越多的人选择做视频内容来作为自己的副业&#xff0c;甚至有些人直接当成主业&#xff0c;对于自媒体人而言&#xff0c;除非了主流的头条、大鱼等&#xff0c;B站UP也是不容…

大学四年,我把私藏「B站」 20 个学习 UP 主贡献出来!

写在前边 上次的学习网站推荐文章&#xff0c;收到了很多小伙伴的私信和评论区的感谢&#xff0c;同时呢&#xff0c;小鹿非常感谢各位小伙伴的支持&#xff0c;这也是小鹿不断创建的一个动力所在。 大学四年&#xff0c;我把私藏的自学「学习网站/实用工具」都贡献出来了 与…

扒一扒B站(二)

免责声明 本文仅用于学习&#xff0c;不得将技术分析的内容用于商业或者非法用途&#xff0c;如因本文内容造成的不良影响和后果与本作者无关&#xff0c;如有侵权&#xff0c;请及时联系作者进行处理&#xff0c;予以删除。 小破站越来越多人用了&#xff0c;作为一个B站的深度…

为什么 B 站的弹幕可以不挡人物?

那天在 B 站看视频的时候&#xff0c;偶然发现当字幕遇到人物的时候就被裁切了&#xff0c;不会挡住人物&#xff0c;觉得很神奇&#xff0c;于是决定一探究竟。 高端的效果&#xff0c;往往只需要采用最朴素的实现方式&#xff0c;忙碌了两个小时&#xff0c;陈师傅打开了 F1…

B站up主能挣多少钱?

大家好&#xff0c;我是小z 越来越多的朋友成为up主&#xff0c;那up主到底能不能挣钱&#xff1f;能怎么挣钱&#xff1f;这些问题&#xff0c;下面的文章可以给到答案。 b站恰饭主要4种形式&#xff0c;创作激励、接广告、充电计划、直播收入。 先说创作激励&#xff0c;只要…

马保国B站封神,这一年能挣多少钱?

文章转载自挖数 据维基百科显示&#xff0c;马保国生于1951年&#xff0c;今年69岁&#xff0c;1970年12月高中毕业后从军入伍&#xff0c;在山东长岛要塞区服役5年&#xff0c;1976年从部队复员回到内乡县城被分配到南阳市当工人。 70年代国内工人的平均月工资在25-40元/月之…

B站刷弹幕

耍耍b站弹幕 先说说b站弹幕原理&#xff1a; 即post请求 你发一个弹幕&#xff0c;根据你当前的cookies和headers&#xff0c;加上data内容&#xff0c;对b站的接口 ‘https://api.bilibili.com/x/v2/dm/post’ 发送一个post请求。 会不会封号&#xff1f;理论上不会&#xff…

SAP-MM发票校验容差详解

MIRO发票校验容差详解 MIRO发票校验容差是指收货业务与发票校验业务之间的差异&#xff0c;这种差异可 能是物料价格差异、收货数量差异、收货金额差异等等&#xff0c;总之&#xff0c;发票校验的容差 内容最为丰富&#xff0c;容差类型有很多种&#xff0c;如下表所示&…

Cadence Allegro如何制作椭圆形通孔焊盘?

一般常规的通孔焊盘大多数是圆形孔&#xff0c;但也有一比较特殊的通孔焊盘&#xff0c;比如DC接口座子&#xff0c;不常见的电源IC焊盘等。下面以绘制一个外长轴为10mm,外短轴为6mm,钻孔的长轴6为mm&#xff0c;钻孔的短轴为4mm椭圆形通孔焊盘举例说明&#xff1a;如下图&…

python画椭圆形_如何绘制Python中的半椭圆?

使用matplotlib.patches.Arc可以使半椭圆形,只需指定关键字theta1=0.0, theta2=180.0(或90至270)。 我写了一个名为arcs的包装函数,用于制作Arc s的散点图。 它使用PatchCollection,应该有更好的性能并启用colorbar。 你可以在gist (link)找到它。 下面是一个例子: a =…

C 画椭圆

C语言画圆 使用C语言画椭圆。 完整代码 #include "stdio.h" #include "graphics.h" #include "conio.h" int main() {int x360,y160,driverVGA,modeVGAHI;int num20,i;int top,bottom;initgraph(&driver,&mode,"");topy-30…

Altium Designer圆形、椭圆形敷铜

关键操作&#xff1a;选中画出的圆&#xff0c;工具-->Covert-->从选择的元素创建区域 1&#xff0c; 用复制或是绘制的方式画一个圆或是椭圆。 2&#xff0c; 例如&#xff0c;将上面中间部分圆&#xff0c;全部敷为裸铜。 关键操作&#xff1a;选中画出的圆&#xff0…

html 椭圆特效,使用CSS3实现椭圆动画效果

写在前面的话: 有这样一个需求,在大屏中要实现几个球用椭圆形状的布局进行展示,展示的同时还要沿着椭圆轨道进行运动。经过 百度结合自身的思考之后给出了以下demo。 正文: 首先我们先写结构 类名为area的div为存放球类的容器,类名为ball的div为球 接着定义样式 .area{wid…

快速记住键盘字母排列顺序的口诀

2019独角兽企业重金招聘Python工程师标准>>> 快速记住键盘字母排列顺序的口诀 众所周知,计算机键盘字母是按一种杂乱无章的顺序排列的。要死记硬背记住26个无序字母的排列顺序&#xff0c;显然很困难。而不记住键盘字母的排列顺序&#xff0c;势必影响学习打字和提高…

计算机打字速录,速录员打字口诀有哪些

打字有很多输入法&#xff0c;比如12345数字打字输入法&#xff0c;惠邦五行码&#xff0c;百虎输入法&#xff0c;鼠标点字输入法&#xff0c;英文输入法&#xff0c;拼音录入法、五笔字型录入法等。下面是小编整理的速录员打字口诀&#xff0c;希望可以给大家带来参考。 速录…

学习双拼必看(最全教程):双拼输入法的心得以及快速入门办法

1.简单介绍一下双拼 2.总共18种双拼方案 3.15种双拼方案的具体映射 4.顺便提一下双拼口诀的事情 5.总结不同平台选择的方案 双拼&#xff08;也称双打&#xff09;是一种建立在拼音输入法基础上的输入方法&#xff0c;可视为全拼的一种改进&#xff0c;它通过将汉语拼音中每…