Problem mit dem Löschen eines Intervalls
Kieselnator
- javascript
0 Der Martin0 Take0 MudGuard0 Kieselnator0 zaphod19840 gast_42
mein freund und ich tüfteln gerade an einem mini-js-game, so sieht der quellcode aus:
<html>
<head>
<script language="Javascript" type="text/javascript"> <!--
var count = 2000;
function dies(){
window.clearInterval(aktiv);
count = count-500;
var aktiv = window.setInterval("jump()", Math.round(count));
}
function jump(){
var height = document.body.offsetHeight-100;
var width = document.body.offsetWidth-100;
var zufallhoehe = Math.random()*height+1;
var zufallbreite = Math.random()*width+1;
document.getElementById("box").style.top = zufallhoehe;
document.getElementById("box").style.left = zufallbreite;
}
//-->
</script>
<style>
.box {position:absolute; background: green; color: orangered; width: 100px; height: 100px; top:100px; left: 100px;}
</style>
</head>
<body onload="dies()">
<div class="box" id="box"><a href="#" onclick="javascript:dies();">Hier klicken!!!</a></div>
</body>
</html>
was geht da vor sich?
das ziel ist es, dass der benutzer den link klickt. dieser verschiebt sich allerdings nach einer bestimmten zeit. beim klicken wird diese zeit weiter runter gesetzt. allerdings kommen wir mit unseren kenntnissen nicht vorwärts. in der funktion dies() wird in abhängig keit von der variable count, die bei jedem aufruf durch das anklicken des links heruntergesetzt wird, ein interval gesetzt. beim nächsten aufruf soll allerdings das intervall gelöscht und ein neues gesetzt werden, sodass die zeit die man zum klicken hat, immer kleiner wird. ist die zeit abgelaufen, so verschwindet das fenster und taucht an einer anderen stelle wieder auf...
leider funzt dies mit dem interval-löschen nicht.
weiß jemand weiter?
mfg und danke, gs955 und kieselnator
Hallo,
function dies(){
window.clearInterval(aktiv);
an dieser Stelle gibt es noch keine Variable namens 'aktiv'.
count = count-500; var aktiv = window.setInterval("jump()", Math.round(count));
Hier wird sie erst angelegt - allerdings lokal innerhalb der Funktion, so dass sie beim Beenden der Funktion sofort wieder entsorgt wird.
So long,
Martin
Moin,
mein freund und ich tüfteln gerade an einem mini-js-game, so sieht der quellcode aus:
<html>
<head>
<script language="Javascript" type="text/javascript"> <!--
var count = 2000;
function dies(){
window.clearInterval(aktiv);
count = count-500;
var aktiv = window.setInterval("jump()", Math.round(count));
}
function jump(){
var height = document.body.offsetHeight-100;
var width = document.body.offsetWidth-100;
var zufallhoehe = Math.random()*height+1;
var zufallbreite = Math.random()*width+1;
document.getElementById("box").style.top = zufallhoehe;
document.getElementById("box").style.left = zufallbreite;
}//-->
</script>
<style>
.box {position:absolute; background: green; color: orangered; width: 100px; height: 100px; top:100px; left: 100px;}
</style>
</head>
<body onload="dies()">
<div class="box" id="box"><a href="#" onclick="javascript:dies();">Hier klicken!!!</a></div>
</body>
</html>
>
> was geht da vor sich?
Ein grünes rechteck springt nach dem klicken wie wild durch die gegend. :D
> das ziel ist es, dass der benutzer den link klickt. dieser verschiebt sich allerdings nach einer bestimmten zeit. beim klicken wird diese zeit weiter runter gesetzt. allerdings kommen wir mit unseren kenntnissen nicht vorwärts. in der funktion dies() wird in abhängig keit von der variable count, die bei jedem aufruf durch das anklicken des links heruntergesetzt wird, ein interval gesetzt. beim nächsten aufruf soll allerdings das intervall gelöscht und ein neues gesetzt werden, sodass die zeit die man zum klicken hat, immer kleiner wird. ist die zeit abgelaufen, so verschwindet das fenster und taucht an einer anderen stelle wieder auf...
du definiertst die variable aktiv in einer function, also ist sie nach deren ausführen wieder weg. wenn du außerhalb einer funktion einfach nur `var aktiv;`{:.language-javascript} setzt, ist es eine globale variable, die immer zur verfügung steht. dann musst du in der funktion aber noch das "var" vor der zuweisung entfernen.
Nur so zur Info: es kommt recht häufig vor, dass der link außerhalb der klickbaren fläche ist.
>
> leider funzt dies mit dem interval-löschen nicht.
>
> weiß jemand weiter?
>
> mfg und danke, gs955 und kieselnator
Gruß,
Take
Hi,
var count = 2000;
bei dieser Variable weißt Du, daß sie außerhalb der Funktion existieren muß, um zwischen 2 Aufrufen erhalten zu bleiben.
function dies(){
window.clearInterval(aktiv);
count = count-500;
var aktiv = window.setInterval("jump()", Math.round(count));
Ein paar Zeilen weiter, bei dieser Variable, ist dieses Wissen leider verlorengegangen ...
cu,
Andreas
hallo leute!
danke für eure antworten...
mit diesen änderungen klappt's:
<html>
<head>
<script language="Javascript" type="text/javascript"> <!--
var count = 2000;
function dies(){
window.clearInterval(aktiv);
count = count-500;
aktiv = window.setInterval("jump()", Math.round(count));
}
var aktiv = window.setInterval("jump()", Math.round(count));
function jump(){
var height = document.body.offsetHeight-100;
var width = document.body.offsetWidth-100;
var zufallhoehe = Math.random()*height+1;
var zufallbreite = Math.random()*width+1;
document.getElementById("box").style.top = zufallhoehe;
document.getElementById("box").style.left = zufallbreite;
}
//-->
</script>
<style>
.box {position:absolute; background: green; color: orangered; width: 100px; height: 100px; top:100px; left: 100px;}
</style>
</head>
<body>
<div class="box" id="box"><a href="#" onclick="javascript:dies();">Hier klicken!!!</a></div>
</body>
</html>
Danke vielmals...
jetzt haben wir ein kleines mini-game...
das hätts auch getan ;)
var count = 2000;
var aktiv;
function dies(){
if ( aktiv ) window.clearInterval(aktiv);
count = count-500;
aktiv = window.setInterval("jump()", Math.round(count));
}
das hätts auch getan ;)
nur wenn du "jump()" deklarierst ;-)