Rekursionen oder Nicht Rekursion?
Steffen
- javascript
0 Andreas-Lindig0 Steffen
0 Maxx0 Andreas-Lindig0 Steffen0 Andreas-Lindig
Hallo JavaScript Bastler,
auf Grund externer Anforderungen muss ich mich jetzt auch mit JavaScript auseinandersetzten. Dummerweise scheine ich auch gleich mit dem schlimmsten Anzufangen.
Ich muss mehreren Button zwei Funktionen zuweisen. Das heisst, wenn ich einen Button kurz druecke (und wieder los lasse), soll Seite 1 geladen werden. Wenn ich denselben Button jedoch laenger als 2 Sekunden gedrueckt halte (also nicht wieder los lasse), soll Seite 2 geladen werden.
Nachdem ich mich mit TimeOut und so weiter herumgeschlagen habe, bin ich nun bei Rekursionen angekommen. Diese sehen (fuer mich) vielversprechend aus, aber sind eine Nummer zu gross fuer mich. Ich weiss zwar was sie koennen, aber bekomme es nicht umgesetzt... :-(((
Hier ist mein JavaScript, ich hoffe jemand von Euch kann mir scheinbaren Nichtversteher helfen:
var ZeitMouseDown;
var vState;
function beiStart()
{
vState = 0;
Clock.innerHTML=vState;
Test(vState);
}
function handleMouseDown(dState)
{
if (dState == 1)
{
ZeitMouseDown = ZeitSetzen();
handleMouseDown(3);
}
else
{
if (((ZeitSetzen() - ZeitMouseDown) > 2000) || (vState == 2))
{
Ausgabe();
}
else
{
handleMouseDown(3);
}
}
}
function handleMouseUp()
{
vState = 2;
}
function Ausgabe ()
{
if ((ZeitSetzen() - ZeitMouseDown) < 2000)
{
ShortPress();
}
if ((ZeitSetzen() - ZeitMouseDown) > 2000)
{
LongPress();
}
}
function ZeitSetzen()
{
var today;
today = new Date();
return today.getTime();
}
function LongPress()
{
document.location.href="Seite2.htm";
}
function ShortPress()
{
document.location.href="Seite1.htm";
}
Ich hoffe, jemand kann mir weiter helfen.
SOS
Steffen
hoai,
1.
wann wird denn
function handleMouseDown(dState)
überhaupt aufgerufen?
2.
Die Idee, da ständig die Funktion zu wiederholen bis es soweit ist, finde ich nicht so prickelnd. Gibt es da nicht diesen Handler "onKeyPress" oder so?
Gruß, Andreas
Super, danke fuer den schnellen Einstieg :-)))
wann wird denn
function handleMouseDown(dState)
überhaupt aufgerufen?
mein Link wird durch folgende Befehlte aktiviert:
onMouseDown="handleMouseDown(1);return true;"
onMouseUp="handleMouseUp();return true;"
Die Idee, da ständig die Funktion zu wiederholen bis es soweit ist, finde ich nicht so prickelnd. Gibt es da nicht diesen Handler "onKeyPress" oder so?
was passiert onKeyDown?
Gruss
Steffen
Hallo Steffen,
Das heisst, wenn ich einen Button kurz druecke (und wieder los lasse), soll Seite 1 geladen werden. Wenn ich denselben Button jedoch laenger als 2 Sekunden gedrueckt halte (also nicht wieder los lasse), soll Seite 2 geladen werden.
ich habe mir den ganzen Wust nur überflogen. Mein erster Gedanke war:
onMousedown
var start = new Date();
onMouseUp
var stop = new Date();
dauer = stop.getTime() - start.getTime()
Wäre dieser Ansatz nicht einfacher?
Grüße,
Jochen
Hallo,
onMousedown
var start = new Date();onMouseUp
var stop = new Date();
dauer = stop.getTime() - start.getTime()
Das Problem ist nur, daß der Zeitpunkt von mouseUp eben erst festgestellt wird, wenn die Maustaste hochkommt. So kann man keine Aktion auslösen wenn nach zwei Sekunden die Maustaste immer noch gedrückt ist.
@Steffen: nach dem ersten Bier hab' ich keine Lust mehr, mich über Dein Problem zu beugen. Morgen vielleicht ;-)
Gruß, Andreas
Danke Leute,
ich habe jetzt auch eine moegliche funktionstuechtige Loesung gefunden. Sie funktioniert genau solang, wie ich nicht diegleiche Longpressversion auf zwei aufeinanderfolgenden Seiten aufrufe.
Ein dummer Problem :-( Kann mir jemand sagen, wie ich meine Daten (Zeitaufrufe usw.) nach verlasen der Seite wieder loeschen kann?
Danke
Steffen
Hallo,
ich habe jetzt auch eine moegliche funktionstuechtige Loesung gefunden. Sie funktioniert genau solang, wie ich nicht diegleiche Longpressversion auf zwei aufeinanderfolgenden Seiten aufrufe.
???
egal! es ist total simpel. beim Pizzakochen bin ich grad' draufgekommen, warum nicht, wenn ich am Rechner sitze? tse, tse...
sieh mal hier:
http://andreas-lindig.de/selfforum/test/timer.html
Du mußt nur die funktionen statt mit den Links mit den gewünschten event-Handlern aufrufen.
Gruß, Andreas
Du mußt nur die funktionen statt mit den Links mit den gewünschten event-Handlern aufrufen.
Danke fuer Deine Ueberlegungen! Als ich es probierte, kam der Longpress nur, wenn ich die Maus wieder losgelassen habe. Genau das soll verwieden werden. D.h. das Longpressereignis soll ausgeloest werden, werden MouseDown...
Naja, das ist wie gesagt geloest. Doch wie kann ich meine gesetzten Werte loeschen, wenn ich die Seite verlasse? Ich habe das Gefuehl, dass die Aufrufe der einen Seite, die nachfolgende Seite beeinflusst.
Gruss
Steffen
Du mußt nur die funktionen statt mit den Links mit den gewünschten event-Handlern aufrufen.
Danke fuer Deine Ueberlegungen! Als ich es probierte, kam der Longpress nur, wenn ich die Maus wieder losgelassen habe.
Quatsch! ein Bißchen Quelltext lesen mußt Du schon selbst. Das Beispiel ist eine Übertragung Deines Problems. Es geht so:
_normaler_ Klick auf mouseDown enstrpicht eben dem mouseDown. Nach 2 Sekunden erscheint die Meldung.
Klick auf mouseUp enspricht mouseUp. Wenn Du früher als 2 sec. _nach_ mouseDown auf mouseUp klickst, erscheint die kurz-Meldung.
Es funktioniert und Du mußt, wie schon gesagt, die Links durch die mouse-Handler ersetzen. Perlen vor die Säue.
Gruß, Andreas
Hi Andreas,
Quatsch! ein Bißchen Quelltext lesen mußt Du schon selbst. Das Beispiel ist eine Übertragung Deines Problems. Es geht so:
Es funktioniert und Du mußt, wie schon gesagt, die Links durch die mouse-Handler ersetzen. Perlen vor die Säue.
wie gesagt, danke fuer Deine Unterstuetzung. Wahrscheinlich habe ich zu wenig Ahnung vom Programmieren, um Deine Version zu verstehen. Gluecklicherweise habe ich durch etwas herumprobieren selbst eine (hoffentlich entgueltige) funtkionstuechtige Loesung gefunden.
DasBlindHuhn
...Wahrscheinlich habe ich zu wenig Ahnung vom Programmieren, um Deine Version zu verstehen.
Du bist mir'n Vogel, kommst hier mit Rekursion an und willst die Grundlagen nicht verstehen... tse, tse...
Gruß, Andreas
Du mußt nur die funktionen statt mit den Links mit den gewünschten event-Handlern aufrufen.
das sollte natuerlich heisse: waehrend MouseDown