bullet.js文件如下
import TimeManager from "./TimeManager.js";export default class Bullet{ rect; x; speed=2; width; col; constructor(txt){ this.elem=this.createElem(txt); } createElem(txt){ if(this.elem) return this.elem; var div = document.createElement("div"); this.randomColor(); Object.assign(div.style,{ whiteSpace: "nowrap", position:"absolute", fontSize:"20px", color:this.col }) div.textContent=txt return div; } randomColor() { this.col = "#"; for (var i = 0; i < 6; i++) { this.col += Math.floor(Math.random() * 16).toString(16); } } appendTo(parent){ if(typeof parent==="string") parent=document.querySelector(parent); parent.appendChild(this.elem); this.rect=parent.getBoundingClientRect(); Object.assign(this.elem.style,{ top:Math.random()*this.rect.height/4+"px", left:this.rect.width+"px"//留神插入开始时是放在视频容器左边外边的 }); this.x=this.rect.width; this.width=this.elem.offsetWidth; TimeManager.instance.add(this);//当弹幕对象创立好增加到视频容器中之后,再将其增加到观察者的单例对象的list上 } update(){ if(!this.width) return; this.x-=this.speed; this.elem.style.left=this.x+"px"; if (this.x < -this.width) {//这步是弹幕对象挪动了整个视频容器的地位+自身文本撑开的宽度 //当弹幕播放完之后删除,观察者单例对象的list上,dom构造中以及堆中都要删除 TimeManager.instance.remove(this); this.elem.remove(); this.elem=null; } }}