2017-12-28 10 views
0

Dieses Beispielprogramm startet den Timer in 1000ms, wenn auf die Schaltfläche geklickt wird und die Score-Variable kontinuierlich auf dem Bildschirm gedruckt wird. Wenn der Score 100 wird, möchte ich, dass der Timer in 500ms läuft. Wenn der Score 300 wird, möchte ich, dass der Timer in 250ms läuft.Verringern der Timer-Variable

My Start fuction und Score-Funktion in der TS-Datei unter:

public ScoreNumber: number = 0; 
public TimeOfScore; 
public Start() { 
    this.TimeOfScore= setInterval(() => { 
     this.Score(); 
    }, 1000); 

public Score(){ 
ScoreNumber++; 
} 

Start-Funktion ruft mit der Taste in der HTML-Datei. Die Partitur Druck auf dem Bildschirm wie folgt aus:

<div>{{Score}}</div> 

änderte ich den Code wie folgt aus:

public ScoreNumber: number = 0; 
public TimeOfScore; 
public time:number=1000; 
public Start() { 
    this.TimeOfScore= setInterval(() => { 
     this.Score(); 
    }, time); 

public Score(){ 
ScoreNumber++; 
if(this.ScoreNumber>100&&this.ScoreNumber<300){ 
this.time=500; 
} 
else if(this.ScoerNumber>300){ 
this.time=250; 
}  
} 

Natürlich ist der Code nicht funktioniert, wie ich wollte. Weil die Startfunktion nur einmal aufruft. Wie kann ich diese Zeitvariable verringern?

Antwort

0

klar Intervall und setzen Sie ihn wieder

if(this.ScoreNumber>100&&this.ScoreNumber<300){ 
this.time=500; 
this.restartInterval(); 
} 
else if(this.ScoerNumber>300){ 
this.time=250; 
this.restartInterval(); 
} 

Restart Intervallfunktion

restartInterval() 
{ 
    clearInterval(this.TimeOfScore); 
    this.TimeOfScore= setInterval(() => { 
     this.Score(); 
    }, this.time); 
} 
+0

Das ist richtig. Vielen Dank. – osmnfrkn61

+0

Es macht keinen Sinn, ein Intervall zu verwenden, wenn Sie es jedes Mal löschen, wenn es ausgeführt wird. – JJJ

+0

Intervall ist nicht in jedem Durchgang gelöscht, die es mit bestimmten Bedingungen gelöscht wie Score ist 100, 300 ect –

0

1) verwenden nur eine rekursive SetTimeout 2) die Javascript-Konventionen folgen!

private scoreNumber: number = 0; 
private duration: number = 1000; 
private running = false; 

public start(){ 
    if(this.running) return; 
    this.running = true; 
    run(); 
} 

private run(){ 
    this.scoreNumber++; 
    if(this.scoreNumber > 100 && this.scoreNumber < 300){ 
    this.duration = 500; 
    } else if(this.scoreNumber > 300){ 
    this.duration = 250; 
    } 
    setTimeout(run, this.duration); 
} 
Verwandte Themen