JS: Rekursive Funktion und Argumentenübergabe

  • #1
C

Cledith

Bekanntes Mitglied
Themenersteller
Dabei seit
04.11.2001
Beiträge
1.210
Reaktionspunkte
0
Hi,
ich stehe gerade auf dem Schlauch. Ich sehe es nicht.

Folgender Code macht so viel als einen DIV Container von der Breite 10px bis zur Breite maxwidth zu vergrößern. Nichts wildes, nur soll die Funktion nicht für einen speziellen Container sein sondern natürlich vielseitig benutzbar sein.

Code:
var k=0;

         function size(obj,maxwidth){
         	k = k + 6;
                 document.getElementById(obj).style.width = k + px;

                 timer = setTimeout(size('+obj+',+maxwidth+),5);
                 if(k > maxwidth){
                 	clearTimeout(timer);
                         k=10;
                         maxwidth=0;
                 }
         }
         function show_menu(obj,maxwidth){
                 object = document.getElementById(obj);

                 if(object.style.visibility == visible){
                   	object.style.visibility = hidden;
                 }else{
                 	object.style.visibility = visible;
                         size(obj,maxwidth)
         	}
         }
Jetzt wollte ich das so machen, dass die ID als zweites Argument mitgegeben wird. Nur wenn ich die Funktion size() rekursiv aufrufe, dann müsste der Objektname wohl als String übergeben werden, was er aber anscheinend nicht wird. Jedenfalls steht der Objectname nach dem ersten rekursiven Aufruf nicht mehr zur Verfügung.

Kann mir jemand sagen, wie ich das machen kann? Wenn möglich nichts fertiges, darf aber natürlich nach belieben umgeschrieben werden.

Ich danke!

// Edit:
Problem ist dank Conny schon gelöst. Der obige Code funktioniert. Das Posting kann gerne auch gelöscht werden, ist kein Problem mehr. Danke nochmals @ Conny.
 
  • #2
Hi

Warum sich mit Rekursion einen abbrechen?
Du kannst das Timeout auch einfach in eine Schleife reinsetzen, und so die Breite vergrößern.
Rekursion ist zwar schön, aber immer auch langsamer.
Würd ich gerade für flüssige JS Animationen nicht nehmen.

Gruß, Michael
 
  • #3
@Micha,

Cledith hat nen RIESEN Sch... gebaut *grins*
Hoffentlich gibt er es auch zu ;D ;D ;D

gruss conny

edit:
Ich bin ne Petze

Falsch:
Code:
size('+ob+',+maxwidth+),5);

Richtig:
Code:
size('+obj+',+maxwidth+),5);
 
  • #4
Hi

Also dass der obige Code funktioniert glaub ich aber immer noch nicht 8)

Gruß, Michael
 
  • #5
@Micha:

Ich verstehe nicht ganz, wie du das ganze meinst. Kannst du das evlt. nen biscschen plausibel machen?
 
  • #6
PCDReitz schrieb:
Hi

Also dass der obige Code funktioniert glaub ich aber immer noch nicht 8)

Gruß, Michael
Tut er aber ;)
 
  • #7
  • #8
Hi

z.B.:

function size(obj,maxwidth){
k = k + 6;
document.getElementById('ID_des_DIV_Containers').style.width = k + px;

timer = setTimeout(size('+ob+',+maxwidth+),5);
if(k > maxwidth){
clearTimeout(timer);
k=10;
maxwidth=0;
}
}

Gruß, Michael
 
  • #9
PCDReitz schrieb:
Hi

Gerne, schreib dir eine Funktion size dir nur die Größe verändert.
Diese rufst du in einer Schleife solange auf bis die maximalgröße erreicht ist mittels
http://de.selfhtml.org/javascript/objekte/window.htm#set_interval

Gruß, Michael
Das kommt doch dann aber aufs selbe hinaus. Ob ich eine Funktion rekursiv aufrufe oder aus einer Schleife eine Funktion x-mal hintereinander. Oder ist da nen Unterschied?

Haarspalter! :) Korrigiert.
 
  • #10
@Michael,

aber heut seit ihr beide Blind

obj und ob is ein Unterschied

gruss conny
 
  • #11
Conny schrieb:
Falsch:
Code:
size('+ob+',+maxwidth+),5);

Richtig:
Code:
size('+obj+',+maxwidth+),5);
Noch so ein Haarspalter ;) Warte, was habe ich letztens gelesen? Du bist ein Gerstenkornspalter ;) :D
 
  • #12
Cledith schrieb:
Das kommt doch dann aber aufs selbe hinaus. Ob ich eine Funktion rekursiv aufrufe oder aus einer Schleife eine Funktion x-mal hintereinander. Oder ist da nen Unterschied?

Stimmt, ich dachte es gäbe noch eine Timeout Funktion ohne Methodenaufrufe.
Aber bei ner Schleife bleibt die Stacktiefe gleich ;D

Gruß, Michael
 
  • #13
Ich glaube bei den heutigen Rechenleistungen und den doch verhältnismäßig kleinen Schleifendurchläufen werden wir das alles noch verkraften ;)

Aber ich danke dir.
 
Thema:

JS: Rekursive Funktion und Argumentenübergabe

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben