Zwijane i rozwijane menu w jQuery

Nadszedł czas na napisanie jakiegoś tutoriala. W tym poście opiszę skrypt, dzięki któremu możemy dodać na naszą stronę efektowne, zwijane, pionowe menu lub panele (screen kliknij). Skrypt korzysta z biblioteki jQuery. Instalacja nie sprawia problemu. Ponadto Accordion w łatwy sposób możemy dostosować do naszych potrzeb. No to do dzieła!

  1. Jeśli nie mamy zainstalowanej na stronie biblioteki jQuery, to musimy to uczynić. Można pobrać ją tutaj (po ściągnięciu, plik js wrzucamy na serwer i w head dodajemy znacznik script z odniesieniem do biblioteki).
  2. Następnie musimy pobrać nasz skrypt potrzebny do menu. Pobierz Accordion.
  3. Podobnie jak wcześniej dodajemy do sekcji head znacznik script, ale tym razem z odniesieniem do skryptu js z wcześniejszego punktu. Przykładowo jeśli plik accordion.js jest w tym samym katalogu co jQuery i nasza strona, to sekcja head będzie wyglądać następująco:
    <head>
    <!- -pozostała zawartość head- ->
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="accordion.js"></script>
    <!- -pozostała zawartość head- ->
    </head>
  4. Następnie musimy dodać ustawienia naszego menu/panelu. Tak, więc do head znowu dodajemy fragment kodu. Tym razem wyglądający następująco (można zamiast do head dodać go na końcu pliku accordion.js):
    <script type="text/javascript">
    ddaccordion.init({
    headerclass: "expandable", //nazwa klasy CSS nagłówka
    contentclass: "categoryitems", //nazwa klasy CSS grupy
    revealtype: "click", //kiedy ma się rozwijać: "click", "clickgo", "onmouseover"
    mouseoverdelay: 200, //jeśli revealtype="mouseover", wybierz czas w milisekundach do rozwinięcia
    collapseprev: true, //czy może być otworzona tylko jedna kategoria w tym samym momencie? true/false
    defaultexpanded: [0], //kategorie od razu otworzone [index1, index2, etc]. [] żadna
    onemustopen: false, //czy zawsze przynajmniej jedno musi być otworzone?
    animatedefault: false, //animowanie przy otwieraniu
    persiststate: true, //zapamiętaj ułożenie w czasie sesji przeglądarki
    toggleclass: ["", "openheader"], //klasy CSS: nr1 - zamknięty nagłówek, nr2 - otwarty
    togglehtml: ["prefix", "", ""], //dodatkowy HTML kiedy rozwinięte/zwinięte  ["position", "html1", "html2"]
    animatespeed: "fast", //szybkość animacji w milisekundach (ie: 200), albo hasłami "fast", "normal", lub "slow"
    oninit:function(headers, expandedindices){ //custom code to run when headers have initalized
    //nie ruszaj
    },
    onopenclose:function(header, index, state, isuseractivated){ //custom code to run whenever a header is opened or closed
    //nie ruszaj
    }
    })
    </script>
  5. Teraz trzeba nadać odpowiednie style. Tak, więc otwieramy nasz arkusz stylów i dodajemy coś takiego (oczywiście można wszystko dowolnie edytować wedle uznania):
    .arrowlistmenu{
    width: 180px; /*szerokość menu*/
    }
    .arrowlistmenu .menuheader{ /*generalny styl nagłówka listy*/
    font: bold 14px Arial;
    color: white;
    background: black url(titlebar.png) repeat-x center left;
    margin-bottom: 10px; /*odległość nagłówka od treści*/
    text-transform: uppercase;
    padding: 4px 0 4px 10px;
    cursor: hand;
    cursor: pointer;
    }
    .arrowlistmenu .openheader{
    background-image: url(titlebar-active.png);
    }
    .arrowlistmenu ul{
    list-style-type: none;
    margin: 0;
    padding: 0;
    margin-bottom: 8px;
    }
    .arrowlistmenu ul li{
    padding-bottom: 2px; /*dolna przerwa między punktami menu*/
    }
    .arrowlistmenu ul li a{
    color: #A70303;
    background: url(arrowbullet.png) no-repeat center left; /*wygląd "kropki"*/
    display: block;
    padding: 2px 0;
    padding-left: 19px; /*link text is indented 19px*/
    text-decoration: none;
    font-weight: bold;
    border-bottom: 1px solid #dadada;
    font-size: 90%;
    }
    .arrowlistmenu ul li a:visited{
    color: #A70303;
    }
    .arrowlistmenu ul li a:hover{
    color: #A70303;
    background-color: #F3F3F3;
    }

    Do powyższego efektu potrzebne są trzy obrazki. Możesz je pobrać klikając na każdy z nich prawym przyciskiem myszy i wybierając Zapisz jako…

    titlebar Zwijane i rozwijane menu w jQuery titlebar active Zwijane i rozwijane menu w jQuery arrowbullet Zwijane i rozwijane menu w jQuery

  6. Teraz, kiedy mamy już wszystko co nam potrzeba, możemy wyświetlić nasze menu. W tym celu, w dowolnym miejscu na stronie wstawiamy np.:
    <div class="arrowlistmenu">
    <h3 class="menuheader expandable">CSS Library</h3>
    <ul class="categoryitems">
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    </ul>
    <h3 class="menuheader expandable">CSS Library</h3>
    <ul class="categoryitems">
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    </ul>
    <h3 class="menuheader expandable">CSS Library</h3>
    <ul class="categoryitems">
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    <li><a href="http://www.dynamicdrive.com/style/csslibrary/category/C1/">Horizontal CSS Menus</a></li>
    </ul>
    </div>

Zobacz demo.
To już koniec. Nieprawdaż, że proste? Enjoy!

9 Komentarzy »

  1. Kamil mówi:

    Witam,

    Jak dodać podstrony do tego menu? Jakich znaczników trzeba użyć ?

    comment-bottom
  2. Lisu mówi:

    Wystarczy podstawowa znajomość HTML-a. We fragmencie widać, że podpunkty są w <li></li>.

    comment-bottom
  3. Kamil mówi:

    już wiem :)

    comment-bottom
  4. Kamil mówi:

    Wiesz może w jaki sposób zmienić odległość textu w podmenu od kropki/strzałki (arrowbullet)? Tak żeby text był odsunięty o jakieś 5px

    comment-bottom
  5. Lisu mówi:

    W „.arrowlistmenu ul li a” zamień:
    padding: 2px 0;
    na:
    padding: 2px 0 0 5px;

    comment-bottom
  6. kamil22011 mówi:

    Witam, czy można w jakiś sposób przerobić ten kod żeby menu działało nie tak jak teraz na 1 poziom w dół tylko na trzy poziomy w dół. Tak że jak nie zamknę trzeciego najbardziej wewnętrznego i nacisnę kolejny w pierwszym poziomie to zwinie wszystkie. Nie wiem czy wyrażam się jasno.

    comment-bottom
  7. Lisu mówi:

    Możliwość pewnie taka jest, jeśli znasz się na javasciptcie. Jeżeli się nie znasz to znajdź lepiej inny skrypt.

    comment-bottom
  8. KaroleX mówi:

    Cudowny skrypt! Idealnie to, czego szukałem, czyli idealnie personalizowany. Wielkie dzięki dla autora skryptu oraz tutoriala!!

    comment-bottom

RSS z komentarzami do tego posta. TrackBack URL

Zostaw komentarz