弹幕插件
该插件可以给 NPlayer 添加弹幕功能。它可以保持大量弹幕而不卡顿,并且支持非常多的设置,比如弹幕防碰撞、弹幕速度、字体、速度、透明度、显示区域等。
#
安装执行下面命令使用 npm 包的形式安装。
或者使用 CDN 的方式。
caution
与 NPlayer 不同,在使用 CDN 方式引入的时候,直接用 NPlayerDanmaku
即可。
#
快速上手#
控制条弹幕插件会注册 danmaku-send
和 danmaku-settings
这两项。
通过 autoInsert
参数可以控制是否自动插入,自动插入逻辑是,找到 spacer
项,将它替换成 danmaku-send
和 danmaku-settings
,如果找不到 spacer
则不会自动插入。
你可以将 autoInsert
设置为 false
,然后手动设置控制条项,如上代码,手动加入了弹幕设置项,移除了弹幕发送项。
#
弹幕对象弹幕插件还会在 player 对象上注册一个 danmaku
对象。你可以通过 player.danmaku
访问该对象。
#
弹幕列表弹幕列表可以通过 items
参数传入,一个弹幕对象签名如下。
弹幕列表必须按照 time
从小到大排序。如果获取的弹幕是无序的,那么在传入之前需要自己 .sort((a, b) => a.time - b.time)
一下。
你还可以通过 danmaku
对象的 appendItems
和 resetItems
等方法,添加和重置弹幕。
#
弹幕事件弹幕插件也会在 player
对象上触发一些事件,你可以使用 player.on
监听事件。你可以通过 danmaku.EVENT
对象访问相关事件名,或直接使用字符串。
#
DANMAKU_SEND (DanmakuSend)用户发送弹幕之前触发。
#
DANMAKU_UPDATE_OPTIONS (DanmakuUpdateOptions)用户更新弹幕设置后触发。
#
配置参数配置参数是初始化弹幕插件时传入的参数。
默认参数如下:
autoInsert: boolean
#
是否自动插入控制条项。
disable: boolean
#
是否禁用弹幕
blocked: Array<'scroll' | 'top' | 'bottom' | 'color'>
#
禁用的弹幕类型数组。
fontsize: number
#
字体大小。
fontsizeScale: number
#
默认字体的放大比例,0.5
到 1.5
。
opacity: number
#
弹幕不透明度,0.1
到 1
。
speed: number
#
弹幕速度倍数,0.5
到 1.5
。
area: 0.25 | 0.5 | 0.75 | 1
#
弹幕显示区域。
unlimited: boolean
#
是否开启无限弹幕模式。
bottomUp: boolean
#
滚动类型弹幕是否从下到上。
colors: string[]
#
发送弹幕时可选的颜色数组。
duration: number
#
一条弹幕展示的时间。
items: BulletOption[]
#
弹幕数组。弹幕数组必须要按时间从小到大。
zIndex: number
#
弹幕的层级。
persistOptions: boolean
#
是否持久化,用户弹幕设置。
isDefaultColor?: (color: string) => boolean
#
用于判断是否是默认颜色,当用户屏蔽才彩色类型弹幕时,会调用该方法,把这个方法返回 false
的弹幕全部屏蔽。
默认只对 #fff
、 #ffffff
或空返回 true
。
maxPerInsert: number
#
单次插入多少弹幕,默认是 20
个。
poolSize: number
#
为了避免重复创建弹幕对象,弹幕内部有个弹幕池,这个参数用于设置弹幕池大小,默认为 50
。
discard: (b: BulletOption) => boolean
#
发送弹幕之前会调用该回调,用来判断是否丢弃当前弹幕。
#
danmaku 对象通过 player.danmaku
可以访问弹幕对象。
#
属性el: HTMLElement
#
弹幕容器 DOM 元素。
opts: DanmakuOptions
#
弹幕参数。
enabled: boolean
#
是否启用。
paused: boolean
#
是否暂停。
fontsize: number
#
最终字体大小,fontsize * fontsizeScale
。
speedScale: number
#
最终弹幕速度倍速,playbackRate * speed
。
#
EVENT弹幕插件触发事件对象。
#
方法send(opts: BulletOption): void
#
发送一个弹幕。
pause()
#
暂停弹幕。
resume()
#
恢复弹幕。
getItems(): BulletOption[]
#
获取弹幕列表。
addItem(opts: BulletOption): number
#
添加一个弹幕到弹幕列表,并返回该弹幕插入下标。(大量弹幕请不要循环调用该方法,请使用其他批量方法)
appendItems(items: BulletOption[]): void
#
在现有弹幕列表末尾添加弹幕列表。需要保证添加的弹幕列表是有序的,而且其第一个弹幕的时间比现有的最后一个时间大。
resetItems(items: BulletOption[]): void
#
重置弹幕列表。如果你又有一堆无序弹幕列表需要加入。可以通过 getItems()
获取现有弹幕,然后拼接两个列表,做排序,再调用该方法。
clearScreen()
#
清屏。
enable()
#
启用。
disable()
#
禁用。