Frage von Kakaobaum, 22

JS clearTimout?

Hallo Leute,

wie schon oben gesagt, habe ich eine Frage zu der JS Funktion clearTimeout. Ein Timeout soll gesetzt werden, und sobald eine Aktion ausgeführt wird, bzw. sich eine Variable ändert, soll der Timeout abgebrochen werden.

Mein Code(in JS ist)

function wait(){ if(done==true){var time = setTimeout(gameMode, inter);}

done = false; }

Und später in einer anderen Funktion:

clearTimeout(time);

Der Timeout wird zwar gesetzt und auch ausgeführt, allerdings wird er nicht auf 0 gesetzt, sobald die clearTimeout Zeile ausgeführt wird.

Antwort
von Dory1, 14

Die Funktion setTimeout gibt eine ID zurück, mit der der Timeout abgebrochen werden kann. Auf 0 gesetzt wird da aber nichts.

Ich glaube dein Problem ist, dass du gar nicht die korrekte ID an clearTimeout übergibst. Die Variable "time", die du in der wait-Funktion deklarierst ist ausserhalb dieser Funktion nämlich nicht sichtbar. Du müsstest die time-Variable schon außerhalb der wait-Funktion deklarieren:

var time = null;

function wait() {
  if (done == true) {
    time = setTimeout(gameMode, inter);
  }
  done = false;
}

...

clearTimeout(time);
Kommentar von Kakaobaum ,

Danke Dory1 für deine Antwort.

Leider funktioniert es immer noch nicht. Ich schicke dir einfach mal den weiteren Relevanten Teil, vielleicht liegt ja dort der Fehler...

background_canvas=document.getElementById("Background_canvas");
menu= background_canvas.getContext("2d");
bg();
//gameMode();

function bg(){
var xoff = (window.innerWidth-1344)/2;
var yoff = (window.innerHeight-840)/2;
var Background_image = new Image();
Background_image.src = "BG.jpg";
Background_image.onload = function () {
menu.drawImage(Background_image, xoff, yoff);
TextBG();
document.addEventListener("keydown", key_down, false);
gameStart();
}
}

function mouse(e)
{
var x = e.pageX - document.getElementById("game_object").offsetLeft;
var y = e.pageY - document.getElementById("game_object").offsetTop;
//document.getElementById("x").innerHTML = x;
//document.getElementById("y").innerHTML = y;
//alert("Y"+y);
//alert("X"x);
}

function TextBG(){
menu.fillStyle="#696969";
menu.strokeStyle="#383838";
menu.fillRect(window.innerWidth/6,0,(window.innerWidth/6)*4,window.innerHeight);
menu.lineWidth=5;
menu.strokeRect(window.innerWidth/6,0,(window.innerWidth/6)*4,window.innerHeight);

}
function gameStart(){
menu.font="30px Comic Sans MS";
menu.fillStyle="white";
TextBG();
window.setInterval(wait,2000);
}
function wait(){
//alert(inter);
if(done==true){time = setTimeout(gameMode, inter);}
done = false;
}
function gameMode(){
TextBG();
menu.fillStyle="white";
state = state + 1;
if(state==1){
menu.fillText("Hallo?",window.innerWidth/6+40,650);
}
if(state==2){
menu.fillText("Hallo?",window.innerWidth/6+40,550);
menu.fillText(unescape("H%F6rt mich jemand?"),window.innerWidth/6+40,650);
}
if(state==3){
menu.fillText("Hallo?",window.innerWidth/6+40,450);
menu.fillText(unescape("H%F6rt mich jemand?"),window.innerWidth/6+40,550);
menu.fillText("Funktioniert dieses Ding?",window.innerWidth/6+40,650);
}
if(state==4){
Entscheidung1();
}
done = true;
}
function Entscheidung1(e){
menu.fillText("Hallo?",window.innerWidth/6+40,350);
menu.fillText(unescape("H%F6rt mich jemand?"),window.innerWidth/6+40,450);
menu.fillText("Funktioniert dieses Ding?",window.innerWidth/6+40,550);
inter = 10000;
//while(key_id!=13){
if(state==4){
if(ls!=4){
menu.fillStyle="darkRed";
menu.fillText("Wer ist da?",window.innerWidth/3-100,650);
menu.fillStyle="white";
menu.fillText("Ja, es funktioniert",window.innerWidth/3+100,650);
ls = 4;
}
}
else{
if(ls!=5){
menu.fillStyle="white";
menu.fillText("Wer ist da?",window.innerWidth/3-100,650);
menu.fillStyle="darkRed";
menu.fillText("Ja, es funktioniert",window.innerWidth/3+100,650);
menu.fillStyle="white";
ls = 5;
}
}
//}
}
function key_down(e)
{
var key_id = e.keyCode || e.which;
/*if(key_down)
{
alert(key_id);
}*/

if(key_id == 13)
{
if(state==4 || state == 5){
if(state==4){state=6; clearTimeout(time);done=true;}
else{state=10;clearTimeout(time);done=true;}
}
e.preventDefault();
}
if(key_id == 37)
{
if(state==4 || state == 5){
if(state==4){state=5;}
else{state=4;}
Entscheidung1();
}
e.preventDefault();
}
if(key_id == 39)
{
if(state==4 || state == 5){
if(state==4){state=5;}
else{state=4;}
Entscheidung1();
}
e.preventDefault();
}

}

var time = null;
var key_id = 0;
var inter = 500;
var end = false;
var state = 3;
var ls = 0;
var key= "none";
var done = true;

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten