-
Zakładki do sidebara
dodano 05.08.2008 / komentarzy: 15 / autor: palmiak
Jako szczęśliwi posiadacze blogów, po pewnym czasie natrafiamy na problem rozrostu sidebara do ogromnych rozmiarów. Jednym ze sposobów jest skorzystać z dobrodziejstw javascript i porobić
zakładki.xhtml i css
Nasze zakładki zamkniemy w
<div>o jakimś id (w naszym przypadku będzie to zakladki). W środku zaś umieścimy<h2><a href="#">tytuł</a></h2>, które będą nam służyć do przełączania między treściami oraz<div>w które będą te treści zawarte. W skrócie będzie to wyglądać tak<div id="sidebar">
<div id="zakladki">
<h2><a href="#about">O mnie</a></h2>
<h2><a href="#archiwum">Archiwum</a></h2>
<h2><a href="#links">Przyjaciele</a></h2>
<div id="about">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce varius viverra mi. Maecenas mattis metus sit amet nibh. Aliquam aliquet, diam at semper tristique
</div>
<div id="archiwum">
<ul>
<li><a href="#">Lipiec 2008</a></li>
<li><a href="#">Czerwiec 2008</a></li>
<li><a href="#">Maj 2008</a></li>
<li><a href="#">Kwiecień 2008</a></li>
</ul>
</div>
<div id="links">
<ul>
<li><a href="#">vivee.info</a></li>
<li><a href="#">tutoriale.vivee.info</a></li>
<li><a href="#">3d.vivee.info</a></li>
</ul>
</div>
</div>
</div>#sidebarumieściłem bardziej, żeby ułatwić sobie stylowania oraz do późniejszej demonstracji.Id divów oraz kotwice są tylko na wypadek, gdyby użytkownik wyłączył js.
Czas to jeszcze ostylować:
* {
margin:0;
padding:0;
}body {
background:#2B2B2B;
}#sidebar {
width:250px;
padding:20px 0;
margin:0 auto;
font:.75em Verdana, Arial, Helvetica, sans-serif;
line-height:1.5em;
color:white;
}#sidebar div div {
list-style:none;
background:#4E4E4E;
padding:8px;
}h2 {
display:inline;
font-size:1em;
margin:0 4px 0 0;
}h2 a {
background:#4E4E4E;
padding:5px;
text-decoration:none;
color:white;
}h2 a:hover, a.active {
background:#C20000;
}#sidebar ul {
list-style:none;
}#sidebar ul a {
color:#FFFFFF;
text-decoration:none;
}#sidebar ul a:hover {
color:#E7E7E7;
}Oczywiście styl możecie dowolnie modyfikować - nie ma on żadnego wpływu na działanie skryptu.
jQuery
Działanie skryptu, który to wszystko obsługuje jest bardzo proste. Najpierw nadajemy pierwszemu
<h2>klasęactiveoraz ukrywamy wszystkie poza pierwszym<div>.Kiedy ktoś kliknie w jakieś
<a>, które znajduje się w<h2>następuje seria czynności:- liczymy, który to jest w naszym divie
<h2>i przypisujemy to zmiennej licznik - usuwamy klasę active z
<h2> <h2>w którym znajduje się wybrany przez nas link dodaje klasę active- ukrywa wszystkie widoczne
<div>w naszym divie - pokazuje odpowiedniego diva - do tego potrzebna nam była zmienna licznik, bo div będzie ten sam w kolejności co
<h2>
Wyglądać to będzie tak:
function tabs(id) {
$("#"+id+" h2:first a").addClass("active");
$("#"+id+" div").not(":first").hide();
$("#"+id+" h2 a").click(function() {
var licznik = $("#"+id+" h2 *").index(this);
$("#"+id+" h2 a").removeClass("active");
$(this).addClass("active");
$("#"+id+" div:visible").hide();
$("#"+id+" div").eq(licznik).show();
return false;
});
}Jest to wersja, która pozwala na zastosowanie kilku serii zakładek na jednej stronie, trzeba je tylko ubrać w diva o innym id.
Pozostaje nam kwestia wywołania skryptu:
$(document).ready(function(){
tabs("zakladki");
});W sumie wygląda to tak.
Więcej zakładek
Jak już wspominałem, żeby umieścić kilka serii zakładek wystarczy każdą z nich “ubrać” w diva o innym id.
Jeszcze nasze zakładki znajdują się w divie #tab1 i #tab2 to wywołujemy to poprzez:
$(document).ready(function(){
tabs("tab1");
tabs("tab2");
});Tutaj możecie zobaczyć jak to działa.
Wersja finalna
Ostatecznie powinno wyglądać to:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sidebar tabs</title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="tab.js"></script>
</head><body>
<div id="sidebar">
<div id="zakladki">
<h2><a href="#about">O mnie</a></h2>
<h2><a href="#archiwum">Archiwum</a></h2>
<h2><a href="#links">Przyjaciele</a></h2>
<div id="about">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce varius viverra mi. Maecenas mattis metus sit amet nibh. Aliquam aliquet, diam at semper tristique
</div>
<div id="archiwum">
<ul>
<li><a href="#">Lipiec 2008</a></li>
<li><a href="#">Czerwiec 2008</a></li>
<li><a href="#">Maj 2008</a></li>
<li><a href="#">Kwiecień 2008</a></li>
</ul>
</div>
<div id="links">
<ul>
<li><a href="#">vivee.info</a></li>
<li><a href="#">tutoriale.vivee.info</a></li>
<li><a href="#">3d.vivee.info</a></li>
</ul>
</div>
</div>
</div></body>
</html>jquery.js pobieramy oczywiście z serwisu jQuery.com.
tabs.js powinno wyglądać tak:
$(document).ready(function(){
tabs("zakladki");
});function tabs(id) {
$("#"+id+" h2:first a").addClass("active");
$("#"+id+" div").not(":first").hide();
$("#"+id+" h2 a").click(function() {
var licznik = $("#"+id+" h2 *").index(this);
$("#"+id+" h2 a").removeClass("active");
$(this).addClass("active");
$("#"+id+" div:visible").hide();
$("#"+id+" div").eq(licznik).show();
return false;
});
}
Podsumowanie
Dzięki temu tutorialowi zakładki nie powinny stanowić dla Was problemu. Pozostaje teraz podpiąć to pod jakiegoś CMS’a.
Warto przeszperać też starsze tutoriale na vivee i spróbować podpiąć jakieś dodatkowe efekty przenikania (może fade?) czy spróbować dodać jeszcze obsługę cookies.
- liczymy, który to jest w naszym divie




















Komentarze / dodaj komentarz
autor: Arkadiusz
dodano: 05.08.2008
wielkie dzięki Palmiak bo zawsze mnie to zastanawiało jak to zrobić
autor: KamilGeneral
dodano: 06.08.2008
Szkoda, że do tego potrzebny jest javascript.
Nie da się czasem samym css’em?
autor: agressiva
dodano: 06.08.2008
KamilGeneral - teoretycznie się da, ale jeżeli nie jesteśmy webmasterami, którzy leją na niektóre przeglądarki i chcemy żeby działalo to wszędzie to JS jest bardzo wskazane.
autor: palmiak
dodano: 06.08.2008
A co złego w odrobinie js? Skrypt jest tak skonstruowany, że nawet osoby z wyłączonym js nie ucierpią (wszystko zostanie rozwinięte).
autor: m1chu
dodano: 07.08.2008
Tut przydatny, bo konkretny ;] Nie mniej jednak jeśli już się używa frameworków w stylu jQuery to można by to chociażby zaanimować jakoś. W przeciwnym razie po co je wykorzystywać skoro można oprzeć się stricte na JSie? :>
autor: palmiak
dodano: 07.08.2008
m1chu, póki co mamy pierwszą część tutoriala rzeki. Wiadomo, że mozna to zanimować, obsługę ciastek dodać, zademonstrować podpięcie pod różne CMSy etc etc (czekam na pozostałem propozycje).
autor: Arkadiusz
dodano: 07.08.2008
Palmiak a mógłbyś pokazać jak podczepić do Wordpress’a
autor: agressiva
dodano: 11.08.2008
Arek - będzie taki tutek - już Maciek przy nim pracuje
autor: Arkadiusz
dodano: 13.08.2008
Agressive dziękuje za odpowiedź bo sam próbowałem ale popełniam jakiś byk :/
autor: agressiva
dodano: 13.08.2008
Niech zgadnę - problem z template tagami?
Czy bardziej z działaniem samych zakładek?
PS. Jak pamiętam, miałam otrzymac od Ciebie maila…
autor: Arkadiusz
dodano: 13.08.2008
Agressive pierwsze to że coś nie tak z stylami i działanm :/ a druga sprawa wolałbym porozmawiać
na gg lub innym komunikatorze
autor: agressiva
dodano: 14.08.2008
Arek - wieczorem jestem tak padnięta, że nie mam pary na gg
autor: Arkadiusz
dodano: 14.08.2008
Agressive szkoda bo chętnie bym pogadał bo tak na Vivee to tylko zapycham system
nie potrzebnymi komentarzami 
autor: agressiva
dodano: 14.08.2008
To napisz do mnie na maila
Jutro mnie nie będzie - najwyżej wieczorem, ale odpowiem na pewno
Zresztą niedługo na vivee będzie nowy ficzer
autor: m1chu
dodano: 02.10.2008
Witam,
Niektórzy mogą mieć problem z współdziałaniem kilku frameworków (np. jQuery + MooTools). Dzieję się tak np. w przypadku instalacji jakiejś wtyczki korzystającej z drugiej podanej przeze mnie biblioteki i użycia zakładek z tego kursu. Jedno z dwóch może wtedy nie działać prawidłowo (w przypadku zakładek nie zostaną one ukryte, ani nie będzie można pomiędzy nimi przechodzić). Problem nie dotyczy tylko i wyłącznie WordPress, ale także innych skryptów w których używa się kilku bibliotek JavaScript.
Jeśli ktoś będzie miał takowy problem, zapraszam tutaj: http://m1chu.eu/wordpress/kolizje-wspoldzialania-bibliotek-javascript-na-podstawie-wtyczek-wordpress
Pozdrawiam,
m1chu
Napisz komentarz