Event-Auswertung während Do while
skai
- javascript
Hallo Forum,
ich hätte da mal gerne ein Problem :-)
Ich möchte bei document.onmouseout eine Aktion starten, die in einer Schleife wiederholt abläuft, solange die Maus gedrückt bleibt. Bei document.onmouseup soll die Aktion stoppen.
Ich habe das so versucht (nur skizzenhaft):
document.onmouseout = starte;
document.onmouseup = stoppe;
var flag=true;
function starte() {
do {
hierPassiertWasMehrmals();
}while(flag);
}
function stoppe() {
flag = false;
}
Geht aber nicht. Stoppe() wird nie erreicht.
Ich wäre echt dankbar für eine Idee.
Danke,
skai
ich hätte da mal gerne ein Problem :-)
Na, dann mal los: Probleme gibt's hier besonders günstig.
Ich möchte bei document.onmouseout eine Aktion starten, die in einer Schleife wiederholt abläuft, solange die Maus gedrückt bleibt. Bei document.onmouseup soll die Aktion stoppen.
Das wird schon mal schwierig: Die beiden Eventhandler haben m.E. miteinander wenig zu tun - onMouseUp tritt ein, wenn die Maustaste losgelassen wird, onMouseout tritt ein, wenn der Mauszeiger ein gegebenes Element verlässt. Das erste ist sozusagen ein drag-, das zweite dagegen ein click-event. "Gegenteile" können sein: onMousedown und onMouseUp bzw. onMouseover und onMouseout. Check http://de.selfhtml.org/javascript/sprache/eventhandler.htm
document.onmouseout = starte;
Falsch: starte();
document.onmouseup = stoppe;
Dito: stoppe();
do {
hierPassiertWasMehrmals();
}while(flag);
while(flag) - was meinst Du damit? Steht flag nur als Skizze für eine Bedingung? Check http://de.selfhtml.org/javascript/sprache/schleifen.htm#while. Viel einfacher allerdings löst Du Dein Problem m.E. mit einer simplen for-Schleife. Check http://de.selfhtml.org/javascript/sprache/schleifen.htm#for
Ich wäre echt dankbar für eine Idee.
Bittesehr. Herzlich, twb
document.onmouseout = starte;
Falsch: starte();document.onmouseup = stoppe;
Dito: stoppe();
Nein. Es soll auf das Funktionsobjekt verwiesen werden, die Funktion soll nicht ausgeführt werden.
Mathias
Nein. Es soll auf das Funktionsobjekt verwiesen werden, die Funktion soll nicht ausgeführt werden.
Geschrieben: Stattgegeben.
Und gedacht: Uff! Ich geh' besser schlafen...
Herzlich, twb
Hallo skai,
document.onmouseout = starte;
dies tritt ein, wenn der Mauszeiger den Anzeigebereich des Browser verlässt.
document.onmouseup = stoppe;
der Mauszeiger ist jetzt also ausserhalb des Anzeigebereichs und wenn man die Maustaste jetzt loslässt passiert logischerweise nichts, weil du dich ja nicht mehr innerhalb vom "document" befindest und somit auch kein Eventhandling mehr möglich ist.
Anders kann ich mir dein Problem nicht erklären, da deine Fehlerbeschreibung leicht dürftig ausgefallen ist.
MfG, Mülli
Hallo Leute,
erstmal Danke für die Antworten. Löst leider alles nicht das Problem.
Danke,
skai
Hallo,
erstmal Danke für die Antworten. Löst leider alles nicht das Problem.
- Mülli: Wenn ich in starte() keine Schleife einsetze, wird stoppe erreicht, auch wenn es außerhalb des Frames geschmissen wird.
Ständig laufende while-Schleifen hängen gerne Mal den Browser auf, sodass er nicht reagiert. Musst du wirklich eine solche verwenden, was soll denn dauernd immer wieder ausgeführt werden? Möglicherweise bist du mit setInterval und clearInterval besser beraten.
Mathias
Hallo Mathias,
Danke, das hat's echt gebracht! Damit funktioniert es.
Super, Vielen Dank.
Gruß,
skai
Hi,
function starte() {
do {
hierPassiertWasMehrmals();
}while(flag);
}
Die while Schleife ist vermutlich zu schnell fuer das was Du machst, nutze fuer sowas einen intervat/timeout:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<script language="javascript1.2" type="text/javascript">
var flag = true;
function starte() {
txt = document.createTextNode("x");
document.getElementById("out").appendChild(txt);
if (flag) setTimeout("starte()",50);
else flag = true;
return false;
}
function stoppe() {
flag = false;
}
function init() {
document.onmousedown = starte;
document.onmouseup = stoppe;
}
</script>
</head>
<body id="out" onload="init()">
Ausgabe:
</body>
</html>
Gruesse, Joachim