nagradzam tutoriale
  • Rozwijany panel z odrobiną słodyczy

    dodano 07.07.2008 / komentarzy: 13 / autor: palmiak

    Rozwijany panel z odrobiną słodyczy

    Wyobraźmy sobie, ze chcemy zrobić stronę dla jakiegoś hostingu. I chcemy na stronie umieścić gdzieś logowanie dla osób już zarejestrowanych. W tym tutorialu pokażę Wam jedną z możliwości jak zrobić fajną “skrytkę” na coś takiego.

    xhtml

    Naszą zabawę zaczniemy od przygotowania sobie odpowiednich divów. Wersja najbardziej prymitywna będzie wyglądać tak:

    <div id="head">
            <div class="container">
            Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed rutrum, dui in tristique ullamcorper, nisl tellus sagittis turpis, ac pellentesque mi nisl at arcu. Cras rutrum. Nulla venenatis posuere orci.
           
            Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed rutrum, dui in tristique ullamcorper, nisl tellus sagittis turpis, ac pellentesque mi nisl at arcu. Cras rutrum. Nulla venenatis posuere orci.
           
            Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed rutrum, dui in tristique ullamcorper, nisl tellus sagittis turpis, ac pellentesque mi nisl at arcu. Cras rutrum. Nulla venenatis posuere orci.
        </div>
    </div>

    <div id="slider">
            <div id="line"></div>
       
        <div class="container">
            <div id="button">
                    <a href="#">Strefa klienta</a>
            </div>
        </div>
    </div>

    Widzimy dwa główne divy: #head i #slider. #head będzie tym divem, którego będziemy ukrywać, a #slider będzie tą częścią która będzie zawsze widoczna oraz w której znajduje się link do pokazywania/ukrywania #heada.

    Upiększmy to, czyli css

    W naszym przypadku style wygląda następująco:

    * {
            margin:0;
            padding:0;
    }

    .container {
            width:960px;
            margin:0 auto;
    }

    #head {
            background:#000 url(obrazki/gora.jpg) repeat-x bottom;
            color:white;
            }
           
    #slider {
            height:47px;
            background: url(obrazki/bottom.png) repeat-x;
    }

    #button {
            padding:10px 30px 0 0;
            }
           
    #button a {
            text-decoration:none;
            display:block;
            background:#3E3A37;
            padding:10px;
            color:white;
            float:right;
            }
           
    #button a:hover {
            background:#FF0066;
            }

    Zobacz demo.

    Odrobina magii, czyli jQuery

    Niby wszystko wygląda w porządku, tylko miała to być “skrytka”, a póki co nie jest. Za pomocą jQuery sprawimy, że div#head na początku będzie ukryty, a pokaże się dopiero po kliknięciu w link “strefa klienta”.

    $(document).ready(function(){                                                                                 
            $("#head").hide();
             
             $("#button a").click(function() {
                    $("#head").slideToggle("slow");
                    return false;
            });
      });

    Skrypt najpierw ukrywa #head, a następnie po kliknięciu w linka go pokazuje/ukrywa (w zależności od obecnego stanu).

    Zobacz demo.

    Drobny, ciasteczkowy szlif

    Wszystko fajnie działa, ale ma jedną denerującą właściwość - po przeładowaniu strony zawsze ukrywany jest #head. Fajnie by było, gdyby skrypt pamiętał jaki był jego ostatni stan.

    W tym momencie z pomocą przychodzą nam ciasteczka i wtyczka jQuery cookies. Żeby zaczęła nam działać wystarczy ją pobrać i w <head> dodać <script type="text/javascript" src="jquery.cookie.js"></script>.

    Następnie musimy poprawić nasz skrypt:

    $(document).ready(function(){
                                                           
            var show = $.cookie(’show’);
           
            if (show == null || show == 0 ) {                                              
                    $("#head").hide();
            }
             
             $("#button a").click(function() {
                    $("#head").slideToggle("slow");
                                    if (show == 1) {
                                            show = 0;
                                    } else {
                                            show = 1;       
                                    }
                                   
                                    $.cookie(’show’, show, { expires: 7 });
                                    return false;
                                   
            });
      });

     

    Najpierw przypisujemy do zmiennej show wartość z ciasteczka. Jeżeli show będzie pusty lub będzie miał wartość 0 to #head zostanie ukryty.

    Następna poprawka dotyczy tego co się dzieje gdy klikamy w linka “strefa klienta”. Sprawdzamy najpierw czy show równa się 1, jeśli tak to przypisujemu wartość 0, a gdy równa się 0 to przypisujemy mu 1. 0 oczywiście oznacza, że panel jest ukryty, 1, ze otwarty.

    Zobacz ostateczny efekt.

    Podsumowanie

    Dzięki temu tutorialowi mieliśmy okazję po raz kolejny w praktyce użyć Slide (o których już pisałem) oraz zobaczyliśmy jak działają ciasteczka w jQuery. O ile był to przykład dość banalny, o tyle można go bardzo rozbudować. W końcu tutoriale nie są po to, żeby dawać w pełni gotowe rozwiązania, tylko żeby pokazywać pewne techniki, a już Wasza w tym głowa jak ich użyjecie.

    Komentarze / dodaj komentarz


    • autor: Burger
      dodano: 07.07.2008

      tego szukałem ;D thx


    • autor: Siostra Nocy
      dodano: 09.07.2008

      Świetne, naprawdę ciekawy efekt.


    • autor: Rudik
      dodano: 16.07.2008

      Tutorial świetny, tak samo efekt. Trapi mnie jednak, czy można zrobić, aby dodać więcej tych linków (chodzi mi o np. Strefa klienta), tylko tak, aby każdy z nich prowadził do innego tekstu?


    • autor: agressiva
      dodano: 16.07.2008

      Rudik - jasne, że można tak zrobic. Wg mnie musiałbys stworzyc kilka tych “buttonów” o innych “nazwach” (czyt. klasach lub id), to samo uczynic z boxami które by wyjezdzały z inną zawartością (tutaj tez nadac im inne nazwy). I w jQuery przypisac do danej nazwy buttona, daną nazwę boxa…
      Jeżeli się mylę to niech Palmiak mnie skoryguje :)


    • autor: Rudik
      dodano: 18.07.2008

      Dzięki za poradę :)


    • autor: MEmbrolabilia
      dodano: 14.08.2008

      Czaderskie :)


    • autor: ado
      dodano: 14.08.2008

      fajne, fajne…
      a gdybym np. mial potrzebe, aby okienko wysuwalo sie nie w dol ale w lewo lub w prawo?


    • autor: palmiak
      dodano: 14.08.2008

      Też da się zrobić. Tak z głowy to albo mozna się pobawić funkcją animate, albo skorzystać z jquery UI i tam jest gotowiec do Slide’a we wszystkie strony.


    • autor: ado
      dodano: 14.08.2008

      thx, poszukam


    • autor: borewik
      dodano: 12.11.2008

      trochę mi nie działało gdy {..}(’show’);{..} z linijki trzeciej było w ‘ ‘. Zmienione na ” “. Chodziło :)


    • autor: palmiak
      dodano: 12.11.2008

      Ajaj… chyba WP cudzysłowy pojedyncze pozamieniał. Pod tym względem na źródło najbezpieczniej patrzyć w demo > pokaż źródło.


    • autor: Mati
      dodano: 19.11.2008

      Generalnie podsumowując, to świetna rzecz ten efekt, powinniście przyznać.. ^^’


    • autor: agressiva
      dodano: 19.11.2008

      przyznajemy :)

    Napisz komentarz