manager 钩子
manager 的钩子包含 manager 自身的钩子和 弹幕 的钩子。
注意
- 弹幕钩子和全局钩子以
$前缀作为区分。 - 这里只会介绍
manager自身的钩子,因为弹幕钩子会在弹幕钩子章节介绍。
1. 创建 manager 时注册
示例:
import { create } from 'danmu';
const manager = create({
plugin: {
start() {},
stop() {},
},
});2. 通过 manager.use 来注册
manager.use() 是用来注册插件的 api,如果你有外部插件或者自己编写的插件可用,也可以通过此方法来注册。
示例:
manager.use({
start() {},
stop() {},
});hooks.init
类型:SyncHook<[manager: Manager<T>]>
init 钩子会在创建 manager 的时候触发,一般情况下只有当你通过 create 方法创建 manager 的时候才会用到,这只是一个语法糖让你方便拿到 manager 实例。
const manager = create({
plugin: {
init(manager) {
// .
},
},
});hooks.push
Type: SyncHook<[PushData | Danmaku<PushData>, DanmakuType, boolean]>
push 钩子会在发送弹幕的时候触发,调用 manager.push(),manager.unshift(),和 manager.pushFlexibleDanmaku() 的时候都会触发,你可以在此钩子拿到将要发送的弹幕数据,弹幕类型,是否是 unshift 等。
const manager = create({
plugin: {
push(data, type, isUnshift) {
if (manager.isDanmaku(data)) return;
// 处理高级弹幕
if (type === 'flexible') {
// .
} else {
// .
}
},
},
});hooks.start
类型:SyncHook
start 钩子会在渲染引擎启动的时候触发,调用 manager.startPlaying() 的时候才会触发。
hooks.stop
类型:SyncHook
stop 钩子会在渲染引擎关闭的时候触发,调用 manager.stopPlaying() 的时候才会触发。
hooks.show
类型:SyncHook
show 钩子会在批量将弹幕从隐藏状态改为显示状态的时候触发,调用 manager.show() 的时候才会触发。
hooks.hide
类型:SyncHook
hide 钩子会在批量将弹幕隐藏的时候触发,调用 manager.hide() 的时候才会触发。
hooks.clear
类型:SyncHook<['facile' | 'flexible' | null | undefined]>
clear 钩子会在清空当前渲染和内存中的弹幕和弹幕数据的时候触发,调用 manager.clear() 的时候。
hooks.mount
类型:SyncHook<[HTMLElement]>
mount 钩子会在将容器挂载到指定 DOM 节点的时候触发,你可以在钩子里面拿到挂载的节点,调用 manager.mount() 的时候才会触发。
hooks.unmount
类型:SyncHook<[HTMLElement | null]>
unmount 钩子会在将容器从当前挂载的节点卸载的时候触发,你可以在钩子里面拿到将要卸载的节点,如果有的话,调用 manager.unmount() 的时候才会触发。
hooks.freeze
类型:SyncHook
freeze 钩子会在冻结当前渲染的弹幕的时候触发,调用 manager.freeze() 的时候才会触发。
hooks.unfreeze
类型:SyncHook
unfreeze 钩子会在当前弹幕从冻结解除时候触发,调用 manager.unfreeze() 的时候才会触发。
hooks.format
类型:SyncHook
format 钩子会在容器格式化的时候触发,调用 manager.format() 手动格式化的时候才会触发。
hooks.render
类型:SyncHook<[DanmakuType]>
render 钩子会在每一次轮询渲染的时候触发。
hooks.willRender
类型:SyncWaterfallHook<RenderData>
interface RenderData {
type: DanmakuType;
prevent: boolean;
danmaku: Danmaku<T>;
trackIndex: null | number;
}willRender 钩子会在弹幕即将要进入渲染队列的时候触发,你可以在此钩子阻止弹幕渲染,这对于通过关键字或者轨道 index 来过滤弹幕的功能实现很有用。
hooks.finished
类型:SyncHook
finished 钩子会在当前内存中的所有弹幕渲染完毕的时候触发,但是不代表以后就不会渲染弹幕了,因为你还可能继续在发送新的弹幕。
hooks.limitWarning
类型:SyncHook<[DanmakuType, number]>
limitWarning 钩子会在超过内存弹幕容量阈值的时候触发,如果你没有设置此钩子,则会在控制台抛出告警,如果你想取消控制台告警,可以自行添加此钩子处理。
hooks.updateOptions
类型:SyncHook<[Partial<ManagerOptions>]>
updateOptions 钩子会在更新配置的时候触发,调用 manager.updateOptions() 的时候才会触发,你可以在此钩子拿到新的配置。
注意事项
实际上很多更改配置的方法,例如 manager.setRate 等,底层都是调用的 manager.updateOptions() 方法,也是会触发此钩子的。