Zum Inhalt springen

Layer geht nicht von selbst zu

Erstellt am 25. Oktober 2006 · 4 Antworten · letzte Antwort am 23. November 2006

Tags: Frage

schmidtpublic ·

Hallo,
ich kämpfe jetzt seit Tagen ohne Erfolg um eine Funktion, die mit 'hideMenuWhenNotOver' eigentlich klar sein sollte: Steht die Maus nicht mehr über dem aufgeklappten Menue-Layer, soll dieser wieder verschwinden.

Tut er aber nicht.

Hier mal mein Setup:

  1 {
      NO.wrapItemAndSub=<div class="menueitem1-green">|</div>
      NO.allWrap=<div class="menueitem1">|</div>
      expAll = 1
      noBlur = 1        
      ACT = 1
      ACT.allWrap=<div class="menueitem1active">|</div>
      ACT.wrapItemAndSub = <div class="menueitem1-green">|</div>
   }

 2 = TMENU_LAYERS
   2 {
       layerStyle = position:absolute;top:0px;left:0px;width:0px;VISIBILITY:hidden;
       
       relativeToTriggerItem = 1	
       topOffset = 0
       leftOffset = 200
       expAll = 1		       

       wrap = <ul class="level2">|</ul>
       NO.allWrap = <li> |</li>   
  
       ACT = 1
       ACT.allWrap = <li><div class="menueitem2active">|</div></li>

    }

    3 = TMENU_LAYERS
    3 {
        layerStyle = position:relative;top:0px;left:0px;width:0px;VISIBILITY:hidden;
        displayActiveOnLoad=0
        hideMenueWhenNotOver=1
        wrap = <ul class="level3">|</ul>
        NO.allWrap = <li> |</li> 
        NO.ATagTitle.field = subtitle // title
        NO.ATagTitle.wrap = Link: zur Seite "|"
     

        }

Zur gedachten Funktion:
Ebenen 1 und 2 sind dauernd eingeblendet, verändern sich nur im RO- oder ACT-Fall (werden bold).

Nur die Ebene 3 soll beim Rollover auf Ebene 2 ausklappen - das geht auch. Nur verschwindet der Layer danach nicht mehr, teilweise kommt es zu hässlichen Überlappungen von zwei Layern...

Die hideMenuWhenNotOver-Funktion reagiert gar nicht.
Für sachdienliche Hinweise (auch Ansätze und halbe Lösungen) bin ich mehr als dankbar!

Viele Grüße, Stefan

toyde ·
TSref schrieb

If set (> 1) then the menu will hide it self whenever a
user moves the cursor away from the menu.
The value of this parameter determines the width (pixels) of the zone
around the element until the mousepointer is considered to be far enough away to hide the layer.

https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/ContentObjects/Hmenu/Tmenu/Index.html

oder

» http://lists.netfielders.de/pipermail/typo3-german/2006-February/010867.html

oder

Wenn zusätzlich ein <Bod onLoad-Event eingebunden wird funktioniert hideMenuWhenNotOver nicht mehr.

Ich habe die Lösung gefunden und werde sie an der Quelle posten:

Da ich im Body folgenden Aufruf mache:

<body class="bodymainsite" onload="T3_onloadWrapper();">

funktioniert das GMENU_LAYERS nicht mehr, da onload="T3_onloadWrapper(); nicht mehr aufgerufen wird.

LÖSUNG:

Die Extension "Body onEvents Javascript" installieren und nach Anleitung einbinden, schon sind alle Probleme verschwunden. 🙂

Habe die Extension per Zufall gefunden, nun geht alles wieder.

grüsse

schmidtpublic ·

Hallo toyde, und danke für die schnelle Antwort - die mich aber leider noch nicht weitergebracht hat.

Die Variante mit hideMenueWhenNotOver = 20 (also >1) hatte ich bereits hetestet, aber wieder verworfen, da ich irgendwo wieder gelesen hatte, dass dieser Wert Bolean wäre. Aber egal ob 1 oder größer - es geht nicht.

Abgesehen davon, dass das "Body onEvents Javascript" eine wertvolle Entdeckung ist, bringt mich das auch nicht weiter, zumal die Erklärung unlar ist: er will doch nur onload="T3_onloadWrapper();" aufrufen?

Das ist auch bei mir das einzige onload im <body>.

Hm.

Viele Grüße aus dem Bergischen land, Stefan

schmidtpublic ·

Stopp, ich hab's.
(Das sieht jetzt wieder so aus, als ob man sich vorher keine Mühe gemacht hätte, aber ungelogen: Dieses Problem quält mich seit Tagen und ich dachte, ich hätte alles ausprobiert).

Über Deinen Link bin ich dann noch auf ähnliche Postings gestoßen und irgendwo bin ich auf eine Variante mit

    hideMenuWhenNotOver =150
        hideMenuTimer = 60

gestoßen - und tatsächlich: Der Timer macht's.

Ohne Timer geht nix, und natürlich muss der auch auf der Ebene stehen, die den Layer aufruft (aber das sollte klar sein).

McGregor ·

Hi!

Hatte das selbe Problem. Ich konnte es aber nicht durch den Timer lösen (war schon vorhanden).

Das Problem bei mir war, dass ich ein TMENU_LAYER verwende und zusätzlich per JS einen DIV-Container in seiner Größe dynamisch anpasse. Und zwar dann wenn die Seite geladen wird (onLoad) und wenn die Seite vergrößert/verkleinert (onResize) wird.

Ich musste nach der Installation der Extension auch das onResize entfernen. Das war ärgerlich. Ich habe dann aber onResize testhalber wieder hinzugefügt und aufeinmal ging es. Ich kann es mir nur so vorstellen, dass ich einen kleinen Fehler gemacht hatte.

Ich denke (kann es nicht mehr nachvollziehen) dass mein body im nichtfunktionierenden Zustand so aussah:

<body onResize="dheight()" onLoad="T3_onloadWrapper();">

jetzt sieht er so aus:

<body onResize="dheight();" onLoad="T3_onloadWrapper();">

Ich denke, dass das kleine SEMIKOLON den Ausschlag gegeben hat. Vielleicht ist hier TYPO besonders genau.

Vielleicht hilft es jemanden...

Grüße
McGregor