js function gleichmäßig auf / ab zählen
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
aktuellen position
anbringen
code
eins
funktion
http
idee
laufen
machen
null
parameter
problem
realisieren
richtung
schlauch
sekunde
uhrzeit
url
verhindern
zeitabschnitt
-
Hi
Ich habe eine recht simple Frage und bin mir auch ziemlich sicher, dass es dazu eine Menge Antworten im netz gibt, nur weis ich nicht wie ich danach suchen soll.
ich möchte in javascript eine Function erstellen die einen Parameter (dir) übergeben bekommt.
Wenn dir 1 ist soll eine Variable so lange um eins erhöt werden, bis die Function mit dir = 0 aufgerufen wird. Genauso bei dir = 2, bloß dass jetzt die Variable um eins verringert werden soll.
Das Problem liegt darin, dass die Funktion nicht gegen sich selbst laufen soll, was sie bei folgendem Ansatz aber tut:
function prodimgs_slide(dir){ prodimgs_dir = dir; if(prodimgs_dir != 0) { //if(typeof prodimgs_slide.left == 'undefined') prodimgs_slide.mleft = 1; //document.getElementById('testoutput').innerHTML = prodimgs_slide.left; document.getElementById('testoutput').innerHTML = prodimgs_mleft + '<br/>' + prodimgs_dir; if(prodimgs_dir == 2){ prodimgs_mleft -= 5; }else if(prodimgs_dir == 1){ prodimgs_mleft += 5; } document.getElementById('prod_imgs_slider_prefimgs').style.marginLeft = prodimgs_mleft + 'px'; window.setTimeout(function(){prodimgs_slide(dir);}, 1); }}
ich hoffe ihr könnt mir weiterhelfen.
MFG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe das jetzt mal so gemacht, dass du angeben kannst, um wie viel pro Sekunde erhöht / verringert werden soll. Wenn du das anders möchtest, sage einfach Bescheid.var dir = 0; function foo(tmpDir) { if(tmpDir == 0) { dir = 0; } else { dir += tmpDir; window.setTimeOut('foo('+tmpDir+')', 1000); } }
Edit: Willst du, dass dir beim Aufruf von foo(0) auf 0 gesetzt wird, oder, dass es dann seinen aktuellen Wert beibehält?
Beitrag zuletzt geändert: 20.8.2011 17:52:00 von drafed-map -
vielen Dank.
Also es soll nur aufhören zu erhöhen / verkleiner, aber Nicht den Wert wieder nullen.
Die Idee mit dem Wert übergeben der dann addiert wird ist gut, nur wollte ich später realisieren können, dass wenn ich zb von der aktuellen Position um 30 erhöhen möchte, dass ich die Zeitabschnitte (oder den Addditionssatz) kontinuirlich verringer, es also langsamer wird. -
programtools schrieb:
Ok, dann so:
vielen Dank.
Also es soll nur aufhören zu erhöhen / verkleiner, aber Nicht den Wert wieder nullen.var dir = 0; function foo(tmpDir) { if(tmpDir != 0) { dir += tmpDir; window.setTimeOut('foo('+tmpDir+')', 1000); } }
programtools schrieb:
Das geht damit auch, dafür musst du aber einen zweiten Parameter übergeben.
Die Idee mit dem Wert übergeben der dann addiert wird ist gut, nur wollte ich später realisieren können, dass wenn ich zb von der aktuellen Position um 30 erhöhen möchte, dass ich die Zeitabschnitte (oder den Addditionssatz) kontinuirlich verringer, es also langsamer wird. -
momentmal, warum löschen?
Also wenn ich jetzt aber den Parameter 0 habe, dann stoppt es dennoch nicht sofort, sondern läuft weiter. erst wenn ich ein mal den entgegengesetzten PArameter , bei 1 also -1, anwende stoppt es (bzw wackelt leicht weil es sich ausgleich -> function arbeitet gegen sich selbst) und erst wenn ich jetzt nochmal auf -1 gehe geht es in die andere Richtung. ich möchte aber verhindern, dass die Funktion gegen sich selbst laufen kann.
EDIT:
geradde habe ich deine Seite gesehen (http://drafed-map.lima-city.de/) und gemerkt das da ja genau das gleiche ist. Die Leiste oben bewegt sich nach rechts, wenn man sich im rechten Bereich aufhält bzw nach links wenn im linken. Bloß dass ich nicht die Cursorposition auswerten muss, sondern 2 Buttons mit onmouseover & onmouseout habe.
MFG
Beitrag zuletzt geändert: 20.8.2011 18:43:20 von programtools -
Schau auf meiner Seite doch mal etwas genau hin. Ich werte auch nicht die Cursorposition aus, sondern lasse das Script - genau, wie du es auch willst - auf onmouseover und onmouseout reagieren.
Mache es am Besten so, wie ich es auf meiner Seite gemacht habe, da kannst du auch leicht ein Ausrollen realisieren und es kann nicht zu Konflikten kommen. -
Stimmt. Ich habe nur die Variablen gesehen :D
Allerdings läuft deine Funktion dauerhaft, was ich auch nicht unbedingt haben möchte. Ich brauche nur einen Weg um zu verhindern, dass die Funktion gegen sich selbst arbeitet. -
programtools schrieb:
Nein, sie wird in regelmäßigen Abständen aufgerufen und schaut, ob es was zu tun gibt.
Allerdings läuft deine Funktion dauerhaft
Zu dem, was du willst: Speichere Uhrzeit und Math.random() im globalen Raum, wenn die Funktion aufgerufen wird. Diese beiden Werte (du kannst sie auch zu einem Wert machen) übergibts du dann als Parameter immer weiter. Stimmen Parameter und der Wert im globalen Raum nicht mehr überein, macht die Funktion nichts mehr. So beendest du die letzte laufende Funktion, sobald eine neue beginnt, zu laufen. -
öhm okay. Ich verstehe jezt aber nicht genau wie ich das dann anbringen soll. Es klappt auf jeden fall nicht richtig. Rigentlich geht garnichts mehr -.
-
Kannst du bitte einen Link dazu posten?
-
Okay. Ich hab es mal abgespeckt hochgeladen.
hier der Link: http://programtools.lima-city.de/probleme/javascriptslider/ -
Der Code, den ich dir gegeben habe, funktioniert nicht. tmpDir müsste global sein, damit es funktioniert. Dann wäre es aber besser, das ganze gleich als ständig aktiv um zu setzen. Wenn du das nicht willst, musst du Uhrzeit und Math.random() benutzen.
Du verwendest die Variable aber gar nicht, deswegen geht auch bei sich verändernden Werten nichts. Du musst tmpDir durch dir ersetzen, sonst ist marginLeft immer 1 oder -1.
Das Ganze mit Uhrzeit und Math.random() zu realisieren, macht die Sache aber nur unnötig kompliziert. Eine kontrollierende Einheit ist einfach, zuverlässig, verhindert Konflikte und braucht wenig Code. -
So ich hab es jetzt global gemacht, aber es geht nicht. Die Funktion arbeitet zwar nichtmehr gegen sich selbst, aber dennoch doppelt, weil die Geschwindigkeit sich ständig verzweifacht.
Ich steh glaub ich gerade total auf dem Schlauch. -
Setze einfach einen Intervall, der immer eine Funktion aufruft. Beim mouseover wird dann ein Richtung gesetzt, beim mouseout wird diese verändert, behält aber weiterhin die Information der Richtung. Dann gibt es noch eine Variable, die speichert, wie weit beim nächsten Funktionsaufruf noch verschoben werden soll (Ausgleiten) und von der anschließend ein kleiner Wert abgezogen wird. Diese Variable füllst du beim mouseover gleich mit. Damit sollte ein langsames Ausgleiten möglich sein.
-
Aber ich möchte es ungern mit einer andauernd laufenden function lösen. Das ist so ein bisschen unsauber finde ich. Weil ich ja dann die ganze Zeit was laufen habe, was vielleicht garnicht verwendet wird.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage