Positionierung eines Layer-Menüs über JavaScript verändern

  • souri souri
    R2-D2
    0 x
    117 Beiträge
    0 Hilfreiche Beiträge
    06. 07. 2004, 16:25

    Hallo,

    ich hoffe ich bin hier an der richtigen Stelle für meine Frage (ansonsten: irgendwelche Tipps wo sie besser aufgehoben wäre?)
    Nachdem ich das [url=http://www.typo3.net/viewtopic.php?t=13088]-->hier[/url] geschilderte Problem (horizontales Menü welches am rechten Rand zu lang ist und nach links verschoben werden soll) nicht mittels Typoscript lösen konnte, versuche ich jetzt das ganze selbst durch Abändern der tmenu_layers.php und gmenu_layers.php in den Griff zu bekommen.

    Ich hatte mir überlegt, die [i:f5621ba443]WMid[/i:f5621ba443]DoTop-Funktionen (wobei WMid jeweils für die id eines speziellen Menüs/Submenüs steht) abzuändern.

    Eine solche [i:f5621ba443]WMid[/i:f5621ba443]DoTop sieht zur Zeit bespielsweise so aus (wie sie zustande kommt ist in diesem Zusammenhang wohl eher irrelevant):

    [code:1:f5621ba443]function GLb7feb3_doTop(WMid,id) {
    GLV_menuOn["b7feb3"].left = GLV_curLayerX["af1c29"]+GLV_menuXY["b7feb3"][id][0]-(-20);
    GLV_menuOn["b7feb3"].top = GLV_curLayerY["af1c29"]+20;
    }[/code:1:f5621ba443]

    Mein Gedanke war nun, die rechte Kante des Menüs zu berechnen (xPosition+Breite) und (wenn diese über einem gewissen Wert ist) das Menü nach links zu verschieben (zusätzliche Addition/Subtraktion zu GLV_menuON[WMid].left). Das funktinoiert *prinzipiell* auch. Meine doTops sehen zur Zeit so aus:
    [code:1:f5621ba443]
    function GLaf1c29_doTop(WMid,id) {
    $ueberlaenge=(GL_getObj(id).width + GL_getObj(id).x)-850;

    if($ueberlaenge> 0){
    GLV_menuOn["af1c29"].left = GLV_menuXY["af1c29"][id][0]-(-20)-$ueberlaenge;
    }
    else{
    GLV_menuOn["af1c29"].left = GLV_menuXY["af1c29"][id][0]-(-20);
    }

    GLV_menuOn["af1c29"].top = GLV_curLayerY["af1c29"]+20;
    }
    [/code:1:f5621ba443]

    Das Problem ist aber, dass ich die Positon des Submenüs über GL_getObj(id).x auslese. Diese Funktion nutzt folgenden Code zum Auslesen der Position:[code:1:f5621ba443] this.x= (bw.ns4||bw.op)?this.css.left:this.el.offsetLeft[/code:1:f5621ba443]
    Vor dem ersten Aufruf des Menüs erhalte ich für die Position den Wert 0(kein Menü sichtbar, kann nicht ausgelesen werden). Beim zweiten Aufruf (das Menü bleibt sichtbar= ich kann die Position auslesen) bekomme ich den korrekten Wert und das Verschieben funktioniert auch. [b:f5621ba443]Beim nächsten Aufruf wird jedoch die bereits korrigierte Position ausgelesen, es wird nicht erkannt dass verschoben werden muss und deshalb wird das Menü wieder in der ursprünglichen Position angezeigt[/b:f5621ba443] (sprich: das Verschieben funktioniert nur bei jedem zweiten Aufruf).

    Ich denke es scheitert gerade alles an meinen bescheidenen JavaScript-Kenntnissen... oder ist das so gar nicht realisierbar?

    Wäre toll wenn irgendwer von euch eine Idee/einen Rat übrig hätte, bin gerade ein bisschen überfragt :(


  • 1
  • souri souri
    R2-D2
    0 x
    117 Beiträge
    0 Hilfreiche Beiträge
    08. 07. 2004, 08:39

    hat sich erledigt, war ein kleiner denkfehler meinerseits :o

    ich lasse das Menü jetzt zuerst verschieben so wie es standardmäßig vorgesehen ist im Originalcode und erst dann kommt meine Abfrage nach der Position (habe also einfach nur ein paar Zeilen zu früh abgefragt da war die korrekte Position noch nicht bekannt)

  • 1