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;
}
}
}
发表回复