Intervale
Greensmiley
- javascript
Guten Tag...
Mit dem Code unten versuch ich ein div Mit einem Klick vor und mit einem 2ten Klick zurück zubewegen. Ich kann auch beide Intervale einmal ausführen. Aber dannach passiert nichts mehr bis ich die Seite neu geladen hab.
Jemand eine Idee ?
Vielen Dank
<script type="text/javascript">
var richtung = 1;
var nullpostion =-384;
var rausgefahren = 0;
var rein;
var raus;
function Starten()
{
if(rausgefahren == 0)
{
raus = setInterval(raus,5);
} else {
rein = setInterval(rein,5);
}
}
function rein()
{
if(rausgefahren == 0)
{
rein = clearInterval(rein);
/*document.write(rausgefahren + "|" + rein + "|" + raus);
window.location.reload(true);*/
}
rausgefahren = rausgefahren - richtung;
document.getElementById("anmelden").style.marginLeft = nullpostion - rausgefahren;
}
function raus()
{
if(rausgefahren == 200)
{
raus = clearInterval(raus);
}
rausgefahren = rausgefahren + richtung;
document.getElementById("anmelden").style.marginLeft = nullpostion - rausgefahren;
}
</script>
<input id="button" type="button" value="Anmelden" onclick="javascript:Starten();"/>
<div id="anmelden" style="position:fixed; left:50%; margin-left:-384px; width:220px; height:220px; background-color:#666;"></div>
Intervalle führt man nicht aus.
Vielleicht liegts dran dass du hier
raus = setInterval(raus,5);
etwas an deine Methode zuweist, die heißt nämlich genauso wie die Variable.
Was da dann passiert weiß ich nicht, aber wenn du einer Methode tatsächlich was zuweisen kannst, wird beim nächsten Aufruf nicht mehr die Methode angesprochen, da die ja durch was anderes überschrieben ist.
Hi Intervale,
hi Encoder,
Vielleicht liegts dran dass du hier
raus = setInterval(raus,5);
etwas an deine Methode zuweist, die heißt nämlich genauso wie die Variable.
Nicht nur vielleicht, Du hast vollkommen Recht, Encoder!
Was da dann passiert weiß ich nicht[...]
Nun, an und für sich kann man das machen! Durch "window.setInterval([function],[msec])" übergibst Du die Funktion
"raus" dem Scope (vereinfacht gesagt: Bereich) der Timer-Instanz
(diese wird nun jedesmal nach Ablauf des Intervalls - hier: 5 msec
ausgeführt).
Danach wird Deinem "raus" die ID des erstellten
Timers zugewiesen (jeder Timer-Instanz erhält bei Instanziierung eine eindeutige ID). Damit wird die Funktion "raus" mit der ID überschrieben.
Somit kannst Du zukünftig Dein "raus" nicht mehr als Funktion aufrufen,
da es jetzt um den Typ "Number" handelt. Deshalb solltest Du eigentlich auch
Error-Meldungen ab dem 3ten Klick bekommen, da ab dieser Aktion dem setInterval eine Variable übergeben wird.
Lange Rede kurzer Sinn! Deine Lösung ist:
aus: raus = setInterval(raus,5);
wird: timRaus = setInterval(raus,5);
Dann sollte es klappen!
Hoffe ich konnte helfen ;)
---------------------------------------------
cr0$$ - ATECore v1.0 - 2012