mootoolsnav - click statt mousover --> Einblendeffekt verschwunden

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • matthias123
    Contao-Nutzer
    • 05.03.2010
    • 94

    #1

    mootoolsnav - click statt mousover --> Einblendeffekt verschwunden

    Hallo,

    Ich würde gerne die mootoolsnav einsetzen. Allerdings brauche ich unbedingt, dass die Untermenüpunkte bei einem Klick statt bei Mouseover erscheinen. Ich habe deshalb in dem Template "nav_moomenu.tpl" statt "onmouseover="moomenu_display" "onclick="moomenu_display"" eingefügt.

    Es funktioniert zwar, dass die Unterpunkte erst erscheinen, wenn man auf den entsprechenden Menüpunkt in Level 1 klickt, jedoch erscheinen sie einfach und "blenden" sich nicht langsam ein. Das schaut natürlich nicht so elegant aus!


    PHP-Code:
    <?php else: /* Mit Untermenüs */ ?>
    <li class="<?php if ($item['class']) echo $item['class']; ?> menutoggler"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>" onclick="moomenu_display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>)" onmouseover="moomenu_fire()"><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
    <!-- count accorditem -->
    <?php $GLOBALS['accorditem'][$this->level]++; ?>
    <?php endif; ?>
    Kann mir jemand dabei helfen?
  • soweit_ok
    Gesperrt
    • 07.05.2011
    • 1199

    #2
    Was macht denn die Funktion moomenu_fire()? Guck doch im Script nach, ob das was mit dem Fading zu tun hat. Und falls ja, dann funktioniert es vielleicht, wenn Du den Aufruf im Template statt an mouseouver an das onclick-Event anhängst. Stimmt den überhaupt der Fading wert in dem MooTools-Script? Der ist ja änderbar.

    Kommentar

    • matthias123
      Contao-Nutzer
      • 05.03.2010
      • 94

      #3
      hab ich probiert, leider ändert sich nichts!

      hier der ganze template code:

      PHP-Code:
      <?php
      
        $togglerlevel = 'level_1';
        $menulevel = 'level_2';
      
      ?>
      
      <ul class="<?php echo $this->level; if($this->level == $menulevel) echo ' menuaccord" onmouseover="moomenu_stop()" onmouseout="moomenu_fire()'; ?>">
      <?php if (!isset($GLOBALS['accorditem'][$this->level])) $GLOBALS['accorditem'][$this->level] = 0; ?>
      
      <?php foreach($this->items as $item): ?>
      
      <?php if ($item['isActive']): ?>
      
      <?php if(empty($item['subitems'])): /* Ohne Untermenüs */ ?>
      
      <li class="<?php if ($item['class']) echo $item['class']; ?><?php if($this->level == $togglerlevel) echo ' nosubmenu'; ?>"><p class="active <?php if ($item['class']): ?> <?php echo $item['class']; endif; ?>"><?php echo $item['link']; ?></p></li>
      
      <?php else: /* Mit Untermenüs */ ?>
      <?php if ($this->level == $togglerlevel) $GLOBALS['activemenuaccord'] = $GLOBALS['accorditem'][$this->level]; ?>
      <li class="active <?php if ($item['class']) echo $item['class']; ?><?php if($this->level == $togglerlevel): ?> menutoggler<?php endif; ?>"><p class="active <?php if ($item['class']): ?> <?php echo $item['class']; endif; ?>"<?php if($this->level == $togglerlevel): ?> onmouseover="moomenu.accordion.display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>)" onmouseout="moomenu.accordion.display(activemenuaccord)"<?php endif; ?>><?php echo $item['link']; ?></p><?php echo $item['subitems']; ?></li>
      <?php $GLOBALS['accorditem'][$this->level]++; ?>
      <?php endif; ?>
      <?php else: ?>
      
      <?php if ($this->level == $togglerlevel && strpos($item['class'], 'trail') !== false) $GLOBALS['activemenuaccord'] = $GLOBALS['accorditem'][$this->level]; ?>
      
      <?php if($this->level == $togglerlevel): /* Level 1 */ ?>
      
      <?php if(empty($item['subitems'])): /* Ohne Untermenüs */ ?>
      
      <li class="<?php if ($item['class']) echo $item['class']; ?> nosubmenu" onmouseover="moomenu_stop()" onmouseout="moomenu_fire()"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>"><?php echo $item['link']; ?></a></li>
      
      <?php else: /* Mit Untermenüs */ ?>
      <li class="<?php if ($item['class']) echo $item['class']; ?> menutoggler"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>" onclick="moomenu_display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>)" onclick="moomenu_fire()"><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
      <!-- count accorditem -->
      <?php $GLOBALS['accorditem'][$this->level]++; ?>
      <?php endif; ?>
      
      <?php else: /* Level 2 oder höher */ a?>
      
      <li class="<?php if ($item['class']) echo $item['class']; ?>"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>"><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
      
      <?php endif; ?>
      
      <?php endif; ?>
      
      <?php endforeach; ?>
      </ul>

      Kommentar

      • matthias123
        Contao-Nutzer
        • 05.03.2010
        • 94

        #4
        So wie sich das Menü jetzt verhält, bräuchte ich eigentlich keine Mootoolsnav, da bei einem Klick sich auch die Seite von dem Level_1 Menüpunkt öffnet. Vielleicht ist das der Key. Wie könnte ich das unterbinden? Weil die Animation kann natürlich nicht kommen wenn eine neue Seite geladen wird.

        Also das gewünschte Verhalten wäre:

        Klick auf Menüpunkt Level 1: es blenden sich die Untermenüpunkte ein, es wird keine Seite von Menüpunkt Level 1 geladen!
        Klick auf Menüpunkt Level 2: Es wird die entsprechende Seite geladen.

        Ich weiß dafür gab es schon öfters Anfragen im Forum aber keine wirklichen Lösungen. Vielleicht schaffen wirs diesmal!

        Kommentar

        • soweit_ok
          Gesperrt
          • 07.05.2011
          • 1199

          #5
          Ist schon klar ... das Verhalten, wie z. B. auch die Top-Navi im Firefox. Fände ich an sich auch besser, denn das Aufklappen bei mouseover kann auch lästig sein, insbesondere wenn die Navi nicht ganz oben platziert ist. Leider wüsste ich dafür ad hoc auch keine Lösung und hab aktuell nicht die Zeit, mich näher damit zu befassen, sorry. Falls Du es hinkriegst, wäre es schön, wenn Du die Lösung hier postest. Können andere Contao'ler sicher auch mal brauchen. Einschl. meiner einer. :-)

          Kommentar

          • GeorgDerks
            Contao-Nutzer
            • 20.01.2010
            • 71

            #6
            Die (leider nur halbe) Lösung ...

            In der nav_moomenu.tpl muss die Zeile 35 angepasst werden:

            Statt
            PHP-Code:
            <li class="<?php if ($item['class']) echo $item['class']; ?> menutoggler"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>" onmouseover="moomenu_display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>)" onmouseout="moomenu_fire()"><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
            muss es lauten:
            PHP-Code:
            <li class="<?php if ($item['class']) echo $item['class']; ?> menutoggler"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>" onclick="moomenu_display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>)"><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
            Also einfach "onmouseover="moomenu_display..." in "onclick="moomenu_display..." umtaufen und entsprechendes onmouseout dahinter entfernen.

            Leider ist das nur die halbe Lösung, denn bevor sich die mootools-Navigation komplett aufgebaut hat, wird die angeklickte (d.h. die dem aufklappenden Baum übergeordnete Seite) schon aufgerufen. Das führt dazu, dass die Navigation "springt". Zu meiner Projektsite HIER KLICKEN.

            HIER scheint's dagegen zu funktionieren (Seitenaufrauf erst NACH Aufbau der Navigation). Ich schätze, hier wurde von Hand (per JS?) eine Verzögerung eingebaut (die würde ich in Kauf nehmen). Ist aber nur ein Verdacht. Habe schon gesucht, aber nix gefunden.

            Vielleicht hilft aber mein Hinweis weiter. Würde mich über eine Lösung (die andere Hälfte ;-)) oder auch weitere Hinweise freuen.
            Herzlichen Gruß,
            sigpic

            Kommentar

            • Vollpfosten
              Contao-Fan
              • 07.07.2011
              • 254

              #7
              Das scheint das Verzögerung-Javascript von der anderen Seite zu sein:
              Code:
              var moomenu_timer;
              
              function moomenu_close()
              {
                  moomenu.accordion.display(activemenuaccord);
              }
              
              function moomenu_fire()
              {
                  moomenu_timer = window.setTimeout(moomenu_close, 200);
              }
              
              function moomenu_stop()
              {
                  window.clearTimeout(moomenu_timer);
              }
              
              function moomenu_display(accordionitem)
              {
                  moomenu_stop();
                  moomenu.accordion.display(accordionitem);
              }

              Kommentar

              • GeorgDerks
                Contao-Nutzer
                • 20.01.2010
                • 71

                #8
                Dieses standardmäßig eingebunde moomenu.js unter system/modules/mootoolsnav/html/ hatte ich schon im Blick. Der einzige Unterschied hier zum Standard-JS ist die Zeitangabe bei function moomenu_fire (200ms statt 1500ms). Die Funktion wird hier aber garnicht aufgerufen. Hmm ...
                Herzlichen Gruß,
                sigpic

                Kommentar

                • decon
                  Contao-Nutzer
                  • 26.05.2010
                  • 11

                  #9
                  Zitat von matthias123 Beitrag anzeigen
                  So wie sich das Menü jetzt verhält, bräuchte ich eigentlich keine Mootoolsnav, da bei einem Klick sich auch die Seite von dem Level_1 Menüpunkt öffnet. Vielleicht ist das der Key. Wie könnte ich das unterbinden? Weil die Animation kann natürlich nicht kommen wenn eine neue Seite geladen wird.

                  Also das gewünschte Verhalten wäre:

                  Klick auf Menüpunkt Level 1: es blenden sich die Untermenüpunkte ein, es wird keine Seite von Menüpunkt Level 1 geladen!
                  Klick auf Menüpunkt Level 2: Es wird die entsprechende Seite geladen.

                  Ich weiß dafür gab es schon öfters Anfragen im Forum aber keine wirklichen Lösungen. Vielleicht schaffen wirs diesmal!
                  Es gibt ein Wiki, wie die Verlinkung einzelner Menüpunkte deaktiviert werden kann. Dazu muß eine Kopie der "nav_default.tpl" modifiziert werden. Das könnte man gleichermaßen mit der "nav_moomenu.tpl" machen.
                  Kann hier ein Programmierer helfen?

                  Kommentar

                  • FRAD
                    Contao-Nutzer
                    • 04.10.2011
                    • 27

                    #10
                    Hallo,

                    hat sich in dieser Sache etwas getan? Ich möchte auch gerne ein "klickbares" Menü und kein MouseOver...

                    Viele Grüße

                    Kommentar

                    • oliver.schroth
                      Contao-Nutzer
                      • 10.04.2010
                      • 27

                      #11
                      Vielleicht bringt meine Lösung zumindest denjenigen etwas, die - so wie ich - keine Verlinkung der level-1 Navigation brauchen. Damit ist dann das "Springen" weg, da es keine Seite gibt, die an der Stelle aufgerufen wird.

                      Ich bin mir allerdings nicht sicher, ob das auch für Menues mit mehr als einer Unterkategorie funktioniert.

                      Dazu muss man den Block ab Zeile 35 in der nav_moomenu.tpl:

                      Code:
                      <li class="<?php if ($item['class']) echo $item['class']; ?> menutoggler"><a href="<?php echo $item['href']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?> onclick="this.blur();<?php echo $item['target']; ?>" onclick="moomenu_display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>)"><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
                      komplett ersetzen durch:
                      Code:
                      <li class="<?php if ($item['class']) echo $item['class']; ?> menutoggler"><?php echo $item['link']; ?><?php echo $item['subitems']; ?></li>
                      Das Ding bekommt jetzt von mir noch eine Klasse und einen cursor: pointer verpasst und funktioniert dann zumindest für mich perfekt.
                      Viele Grüße
                      Oliver Schroth

                      Kommentar

                      • barney
                        Contao-Nutzer
                        • 05.11.2010
                        • 8

                        #12
                        Hallo,

                        ich möchte den thread nochmals hervorholen.

                        Ich hätte auch gerne die "Click-Variante", brauche aber die Verlinkung im Level1.

                        Im Prinzip genauso, wie in der Beispielseite aus Antwort 6 von GeorgDerks: http://www.joba-dienstleistungen.de/leistungen.html

                        Der Klick funtioniert, aber es springt halt, wie schon beschrieben.


                        Kann da jemand (inzwischen) helfen?


                        Viele Grüße, danke schon einmal im voraus
                        Barney

                        Kommentar

                        • wsa
                          Contao-Nutzer
                          • 27.10.2009
                          • 131

                          #13
                          Hallo zusammen!

                          Habe dieselbe Anforderung und wäre auch an einer (Standard-)Lösung interessiert.
                          Hat denn jetzt schon jemand eine Lösung gefunden, die er hier der Allgemeinheit zur Verfügung stellen kann und will?

                          Vielen Dank im Voraus und GLG
                          wsa

                          Kommentar

                          • lex83
                            Contao-Nutzer
                            • 12.02.2010
                            • 19

                            #14
                            Mögliche Lösung

                            Nehmt das "mootoolsnav"-script (bis contao 2.11 möglich) und installiert außerdem die Erweiterung "backboneit_scripts". Hier im Seitentemplate einfach "moo_links" aktivieren und der Klicküberschrift die klasse "disabled" mitgeben (z.B. in der Seitenstruktur).
                            Bitte auch alle onmouseover/out mit "onclick" austauschen (nav_moomenu.tpl/html5).
                            Dann sollte das Klappen
                            Getestet mit contao 2.11.11 (.tpl zu .html5 geändert der mootoolsnav)

                            Kommentar

                            • webster
                              Contao-Fan
                              • 15.09.2010
                              • 460

                              #15
                              Also, ich habe zwar noch nicht mit dem Script gearbeitet, aber für mich sieht es so aus, als würde eine kleine Erweiterung des Templates reichen, um den Seitenaufruf aus Level 1 heraus zu unterbinden. Das ehemalige onmouseover wurde ja durch onclick ersetzt. Hinter dem Funktionsaufruf moomenu_display einfach ein return false einfügen und schon sollte es gehen:

                              HTML-Code:
                              [...]
                              onclick="moomenu_display(<?php echo $GLOBALS['accorditem'][$this->level]; ?>); return false;">
                              [...]
                              Außerdem gab es ja bereits ein onclick-Attribut (this.blur() usw...), das würde ich mal vorsichtshalber auskommentieren / entfernen. Ich weiß grad nicht, ob das überhaupt "erlaubt" ist.
                              Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

                              Kommentar

                              Lädt...