Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS类发出信号以创建事件链_Javascript_Typescript - Fatal编程技术网

Javascript JS类发出信号以创建事件链

Javascript JS类发出信号以创建事件链,javascript,typescript,Javascript,Typescript,我已经为我的vue项目编写了一个更大的js类,该项目是为移动设备设计的。然而,我需要我的类发出一个信号,这样我就可以在完成这个类的基础上链接其他事件。当类对象的属性“hasEnd”设置为True时,如何发出信号 在这种情况下,当用户在第一个计时器计数到100时单击“开始”时,它应该触发下一个计时器开始。我希望这个类是可重用的,我想让它触发事件或信号是最好的 我对移动发展没有太多的了解,因此,如果活动不支持移动电话,那么这里的替代方案是什么 类计数器{ 建造师(姓名){ this.hasend=

我已经为我的vue项目编写了一个更大的js类,该项目是为移动设备设计的。然而,我需要我的类发出一个信号,这样我就可以在完成这个类的基础上链接其他事件。当类对象的属性“hasEnd”设置为True时,如何发出信号

在这种情况下,当用户在第一个计时器计数到100时单击“开始”时,它应该触发下一个计时器开始。我希望这个类是可重用的,我想让它触发事件或信号是最好的

我对移动发展没有太多的了解,因此,如果活动不支持移动电话,那么这里的替代方案是什么

类计数器{
建造师(姓名){
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:
反击