@silkytone/danmu
Version:
弹幕的简单实现,实现普通弹幕或高级弹幕。
48 lines (37 loc) • 1.03 kB
text/typescript
// barrage/barrage.ts
import { BarrageItem } from '../interface';
import { Listener } from '../lib';
// TODO: 弹幕基类
export abstract class BarrageBase<T extends HTMLElement> implements BarrageItem {
abstract readonly duration: number;
protected readonly listener: Listener;
get height(): number {
return this.$el.offsetHeight;
}
get width(): number {
return this.$el.offsetWidth;
}
readonly $el: T;
protected constructor(el: T) {
el.style.transform = `translateX(0)`;
el.style.willChange = 'transform';
el.style.position = 'absolute';
el.style.left = '100%';
el.style.top = '0';
//
this.$el = el;
this.listener = new Listener();
}
destroy() {
this.$el.remove();
}
on(key: string, listener: (data: any) => void) {
this.listener.on(key, listener);
}
off(key: string, listener: (data: any) => void) {
this.listener.off(key, listener);
}
once(key: string, listener: (data: any) => void) {
this.listener.once(key, listener);
}
}