Javascript JS类发出信号以创建事件链
我已经为我的vue项目编写了一个更大的js类,该项目是为移动设备设计的。然而,我需要我的类发出一个信号,这样我就可以在完成这个类的基础上链接其他事件。当类对象的属性“hasEnd”设置为True时,如何发出信号 在这种情况下,当用户在第一个计时器计数到100时单击“开始”时,它应该触发下一个计时器开始。我希望这个类是可重用的,我想让它触发事件或信号是最好的 我对移动发展没有太多的了解,因此,如果活动不支持移动电话,那么这里的替代方案是什么Javascript JS类发出信号以创建事件链,javascript,typescript,Javascript,Typescript,我已经为我的vue项目编写了一个更大的js类,该项目是为移动设备设计的。然而,我需要我的类发出一个信号,这样我就可以在完成这个类的基础上链接其他事件。当类对象的属性“hasEnd”设置为True时,如何发出信号 在这种情况下,当用户在第一个计时器计数到100时单击“开始”时,它应该触发下一个计时器开始。我希望这个类是可重用的,我想让它触发事件或信号是最好的 我对移动发展没有太多的了解,因此,如果活动不支持移动电话,那么这里的替代方案是什么 类计数器{ 建造师(姓名){ this.hasend=
类计数器{
建造师(姓名){
this.hasend=false;
该值=0;
这个.maxValue=100;
this.intervalID=null;
this.element名称=“”
this.elementName=名称;
}
开始(){
this.intervalID=setInterval(this.increment.bind(this),10);
}
增量(){
这就是价值++
var el=document.querySelector('.'+this.elementName);
el.innerHTML=this.value;
if(this.value==this.maxValue){
this.hasend=true
clearInterval(此为有效期);
}
}
}
addEventListener('load',function()){
设counterA=新计数器(“counterA”);
设计数器B=新计数器(“计数器B”);
/*
--伪代码--
当计数器A.hasFinished==true时{
计数器b.start()
}
*/
var start=document.querySelector('.start');
start.addEventListener('click',function(){
计数器a.start();
});
})
开始
计数器A:
反击
发出as信号的最简单方法是使用发送事件。窗口
,文档
和每个HTML元素都是这个类的扩展,所以前面提到的每个对象都有这个方法。这允许您发送其他实例可以监听的信号
要按顺序运行计数器,您需要一个以列表形式运行的系统。列表从开始处开始,索引0
,并一直持续到该列表中没有其他项目为止
将事件的调度和列表的结构结合起来,以使其正常工作。每次触发特定事件时,移动到列表中的下一项
下面的示例使用这些技术。我创建了一个新类CounterCollection
,它将控制列表。它侦听一个名为counterend
的自定义事件,该事件在您猜到的每次计数器到达末尾时都会触发。然后它将转到列表中的下一个计数器并运行该计数器,这将一直持续到列表用完为止。为了演示起见,我添加了一个reset
函数,以便您可以多次运行它
类计数器集合{
构造函数(…计数器){
该指数=0;
this.amountOfCounters=counters.length;
this.counters=计数器;
window.addEventListener('counterend',this.nextCounter.bind(this));
}
//用当前索引启动计数器。
开始(){
const counter=this.counters[this.counterIndex];
counter.start();
}
//如果可能,转到下一个计时器并启动它。
//否则,请重置。
下一个计数器(){
if(this.counterIndex+1{
计数器重置();
});
}
}
}
班级计数器{
建造师(姓名){
this.hasend=false;
该值=0;
这个.maxValue=100;
this.intervalID=null;
//在这里存储元素比较便宜。
this.element=document.querySelector('.'+名称);
}
开始(){
this.intervalID=setInterval(this.increment.bind(this),10);
}
增量(){
这就是价值++
this.element.textContent=this.value;
if(this.value==this.maxValue){
this.hasend=true
clearInterval(此为有效期);
//计数器完成后,触发事件。
const counterEndEvent=新事件(“counterend”);
窗口。调度事件(counterEndEvent);
}
}
//我为演示添加了这个,因此您可以多次运行它。
重置(){
该值=0;
this.element.textContent=this.value;
}
}
addEventListener('load',function()){
设counterA=新计数器(“counterA”);
设计数器B=新计数器(“计数器B”);
//将计数器传递到集合中。
常量计数器=新计数器集合(计数器A、计数器B);
var start=document.querySelector('.start');
start.addEventListener('click',function(){
//开始收集。
counters.start();
});
});代码>
开始
计数器A:
反击