创建弹幕渲染器实例
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 FontStroke = {
// 描边颜色
strokeStyle: string;
// 描边宽度
lineWidth: number;
// 线条端点样式
lineCap: CanvasLineCap;
// 线条连接样式
lineJoin: CanvasLineJoin;
// 控制锐角处斜接角的最大长度
miterLimit: number;
}
// 字体描边的默认值
export const DEFAULT_FONT_STROKE: FontStroke = {
strokeStyle: 'rgba(0, 0, 0, 0)',
lineWidth: 1,
lineCap: 'butt',
lineJoin: 'miter',
miterLimit: 10,
}
// 字体阴影相关
export type FontShadow = {
// 阴影颜色
shadowColor: string;
// 阴影模糊半径
shadowBlur: number;
// 阴影在 X 轴的偏移量
shadowOffsetX: number;
// 阴影在 Y 轴的偏移量
shadowOffsetY: number;
}
// 字体阴影的默认值
export const DEFAULT_FONT_SHADOW: FontShadow = {
shadowColor: 'rgba(0, 0, 0, 0)',
shadowBlur: 0,
shadowOffsetX: 0,
shadowOffsetY: 0,
}
export type FontStrokeAndShadow = FontStroke & FontShadow;
/**
* 弹幕渲染器渲染弹幕的配置
*/
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;
} & FontStrokeAndShadow;
/**
* 开发相关配置
*/
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 数据)。