创建弹幕渲染器实例
ts
const barrageRenderer = new BarrageRenderer({
// 容器 DOM
container: 'container',
// video 元素引用
video: document.getElementById('video'),
// 弹幕数据,也可后续设置
barrages: [],
});
完整的参数如下所示:
ts
/**
* 弹幕渲染器 class 构造函数的参数
*/
export type RendererOptions = {
// 容器 DOM
container: string | HTMLElement;
// video 元素(获取 video 元素,只是为了获取播放状态,不会对 video 执行其他操作)
video: HTMLVideoElement;
// 弹幕数据
barrages?: BarrageOptions[];
// 弹幕中渲染图片的配置
barrageImages?: BarrageImage[];
// 渲染相关配置
renderConfig?: Partial<RenderConfig>;
// 开发相关配置
devConfig?: Partial<DevConfig>,
// 一系列钩子函数
// 每一帧渲染前的钩子函数
beforeFrameRender?: FrameRenderHook;
// 每一帧渲染后的钩子函数
afterFrameRender?: FrameRenderHook;
// 每个弹幕渲染前的钩子函数
beforeBarrageRender?: BarrageRenderHook;
// 每个弹幕渲染后的钩子函数
afterBarrageRender?: BarrageRenderHook;
// 蒙版数据
mask?: string | ImageData;
}
// 弹幕的配置看下一小节
/**
* 弹幕中渲染图片的配置
*/
export type BarrageImage = {
// 弹幕图片的唯一标识
id: string;
// 图片的地址
url: string;
// 渲染时的宽
width: number;
// 渲染时的高
height: number;
}
/**
* 弹幕渲染器渲染弹幕的配置
*/
export type RenderConfig = {
// 自定义弹幕过滤器,返回 false,弹幕就会被过滤掉
barrageFilter?: (barrage: BaseBarrage) => boolean;
// 重要弹幕 边框 的自定义渲染函数
priorBorderCustomRender?: RenderFn;
// Canvas 元素默认和 container 等高,为了避免弹幕渲染遮挡住播放器的控制栏,
// 可以设置减少一定的高度
heightReduce: number;
// 弹幕运行速度,仅对滚动弹幕有效(每秒多少像素)
speed: number;
// 显示区域,只针对滚动弹幕,有效值 0 ~ 1
renderRegion: number;
// 滚动弹幕水平最小间距
minSpace: number;
// 是否重叠,只适用于滚动弹幕
avoidOverlap: boolean;
// 透明度,有效值 0 ~ 1
opacity: number;
// 弹幕字体
fontFamily: string;
// 字体粗细
fontWeight: string;
}
/**
* 开发相关配置
*/
export type DevConfig = {
// 是否渲染 fps
isRenderFPS: boolean;
// 是否渲染弹幕边框
isRenderBarrageBorder: boolean;
// 是否打印关键数据
isLogKeyData: boolean;
}
/**
* 自定义 render 函数
*/
export type RenderFn = (options: CustomRenderOptions) => void;
/**
* 自定义 render 函数的参数
*/
export type CustomRenderOptions = {
// 渲染上下文
ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
// 渲染的弹幕实例
barrage: BaseBarrage;
// 渲染器实例
br: BarrageRenderer;
// 缓存获取图片的工厂方法
imageElementFactory: (url: string) => HTMLImageElement,
}
/**
* 帧渲染钩子函数的类型
*/
export type FrameRenderHook = (data: {
ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
br: BarrageRenderer,
}) => void;
/**
* 弹幕渲染钩子函数的类型
*/
export type BarrageRenderHook = (data: {
ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
br: BarrageRenderer,
barrage: BaseBarrage,
}) => void;
弹幕渲染器提供的方法
play(): void;
作用:执行弹幕的播放操作。
pause(): void;
作用:暂停弹幕的播放。
switch(isOpen: boolean): void;
作用:控制是否打开弹幕。
setBarrages(barrageOptions: BarrageOptions[]): void;
作用:设置弹幕数据。
send(barrage: BarrageOptions): void;
作用:发送弹幕。
resize(): void;
作用:container 元素尺寸变更后,canvas 元素以及弹幕的渲染也需要随之进行改变。
setRenderConfig(renderConfig: Partial<RenderConfig>): void;
作用:设置渲染配置。
setDevConfig(devConfig: Partial<DevConfig>): void;
作用:设置开发配置。
renderFrame(): void;
作用:触发一帧的渲染。
setMask(mask?: string | ImageData): void;
作用:设置蒙版数据(图片的 url 或者 ImageData 数据)。