着视频网站和直播网站的兴起,弹幕的功能算是一个核心元素,弹幕最初是由日本视频网站Niconico引入的,国内除了在Bilibili和AcFun等弹幕视频网站中使用之外,其他主流视频网站中的视频播放器也支持弹幕,对于视频网站和直播网站来说,弹幕的交互实时性更高,更加受欢迎。
本文重点介绍一下弹幕的基本原理,以及JavaScript和HTML的代码实现方式,最后分享一个弹幕的开源库。
关于视频网站建设,可以参考我们之前的通过Drupal构建自建视频课程平台。
单条弹幕的属性
弹幕的特性:
弹幕的基本模式:
弹幕的使用场景:
弹幕本身不是对视频的操作,其实是给视频上面加DIV等DOM元素,也就是给视频上面加层,然后展示我们想要的内容即可,目前弹幕的主要实现有两种方式:
首先,这种我们自然想到用Canvas,使用Canvas能很方便地绘制动画,并且获得非常不错的性能,目前前端不少动画都是通过Canvas去做。不过对于基于Canvas的动画而言,最大的问题就是“交互性”上面。
如果用HTML+CSS的方式实现,我们可以很简单地通过监听原生DOM事件去知道哪一条弹幕与用户鼠标发生了交互。但是通过Canvas,我们只能通过监听画布的事件,然后做一堆遍历计算坐标的骚操作去确定是哪一条弹幕。从鹅厂的视频网站可以看到,他们的弹幕是可交互的,所以他们使用了HTML+CSS的实现方式;而B站的弹幕是非交互的,它提供Canvas和HTML+CSS可选,默认是前者。
虽然功能性上两者的实现会有点差异,但弹幕的基本原理都是一样。
所以弹幕本身就是对DIV元素的操作,DIV层一般在Video层上面,类似下面的图,不过也有放在Video层下面,弹幕层在底下,详情参考这篇文章的介绍 https://github.com/logcas/a-barrage
多层的弹幕实现
我们先分析一下文档管理系统的基本需求以及功能点,
从上图可以看到,弹幕是很清晰地分成了一行一行,我把它们称为“轨道”。每一个弹幕都只在轨道上从右往左移动,不会越界。那么,要实现弹幕功能,首先我们必须把弹幕分成若干个轨道,然后再在合适的时间把弹幕“塞”进去让它平移。
每一个轨道会有两个属性:
barrages: T[] = []
offset: number = 0
barrages为一个弹幕数组,offset则是已占据的宽度。offset用于滚动弹幕时,弹幕轨道添加弹幕前判断最佳轨道;当弹幕类型时固定时无作用。barrages存放当前轨道上可现实的弹幕实例。
每一个轨道实例管理自己轨道中的数组,主要进行进行增、删、重置以及更新offest的操作。
push(...items: T[]) {
this.barrages.push(...items)
}
删除弹幕
remove(index: number) {
if (index < 0 || index >= this.barrages.length) { return }
this.barrages.splice(index, 1)
}
重置轨道
reset() {
this.barrages = [] this.offset = 0
}
更新剩余轨
updateOffset() {
const endBarrage = this.barrages[this.barrages.length - 1]
if (endBarrage && isScrollBarrage(endBarrage)) {
const { speed } = endBarrage this.offset -= speed
} }
在知名的男性交友网站github上,已经有一款很好用的弹幕开源解决方案,并且是国产的,叫abarrage,同时实现了Canvas和HTML+CSS的模式,要用的话直接在github把源代码撸下来,并且有在线的体验地址,效果非常不错。
A-Barrage 同时支持Canvas渲染和HTML+CSS的渲染模式,你可以根据实际情况采用不同的渲染引擎进行弹幕的渲染。其中,Canvas是非交互式渲染,也就是说,采用Canvas渲染的弹幕并不会有任何的交互操作,纯展示性质;HTML+CSS是交互式渲染,如果你的网站允许用户与弹幕之间进行一些交互(如点赞、回复等),那么可以采用HTML+CSS的渲染模式,它会结合浏览器的DOM事件进行响应。
github地址: https://github.com/logcas/a-barrage
测试地址: https://logcas.github.io/a-barrage/example/css3.html
网站首页
发弹幕截图
信很多朋友都见到过这种被称之为弹幕样式的排版,但是却不知道怎么做,今天豆猫儿就来跟大家聊一聊弹幕样式如何做。
这种样式,可以使公众号里面的文字随意“漂浮”,给读者耳目一新的感觉,另外可以增加幽默感哦~
没错就是——135编辑器。用户可以在135编辑器官网(www.135editor.com)点击『素材库』=>『样式中心』=>『动态样式』这个分类下面集合了所有135编辑器的动态样式,其中也包括弹幕样式。
这里我们主要介绍4种常用的弹幕样式详细操作方法。
1、秒刷
在文本编辑框内输入弹幕文字,每打一句进行一次换行。最多可以打11句。然后点击弹幕样式,就直接刷好了。
示例
秒刷法
2、HTML替换文字
直接选择弹幕样式,在文本编辑框功能栏里点击【HTML】,切换到代码页面。在代码页面找到下图进行修改。修改完成后,再次点击【HTML】即可回到编辑前的页面。
示例
3、更改背景图片方法
135提供了两种弹幕样式,一种是有背景图的,一种是没有背景图的。你可以有两种方式去更换图片。
1、你可以用秒刷的方式换图,先传图片,选中图片后点击左侧的样式。
2、先点击左侧样式,把它置入编辑器内,然后选中样式中的图片,点击换图。
示例一
示例二
4、高阶玩法
切换成【HTML】页面,找到与下图类似的代码,进行修改。
▼更改弹幕大小
大(size=30)
大
小(size=14)
小
▼更改弹幕起始位置
下面这个弹幕
位置值是:from="800" to="-400"
想让它从中间开始飘
于是修改from值="160"
甚至你还可以改成from="-400" to="800"
那么它就变成倒着飞
135编辑器真好用
▼更改弹幕速度
太快了也可以变慢一点:dur=“8s”
不知道大家有没有学会135编辑器提供的弹幕样式呢?欢迎在评论区交流
·
我是豆猫,运营要好玩也要有趣~
*请认真填写需求信息,我们会在24小时内与您取得联系。