TabPanel w JavaScript
Opublikowano: 2009-07-28 , wyświetlono: 8809
Wstęp
Ostatnio widziałem użyteczny efekt na niektówych portalach, tzn. element strony z zakładkami. Klikanie na zakładki powoduje zmianę informacji w danym obszarze strony bez jej odświeżania. Ten typ interfejsu jest powszechnie stosowany w aplikacjach okienkowych (szczególnie przy funkcjach konfiguracyjnych) i sam bardzo często go stosuję.
Jak zobaczyłem to pomyślałem, by przetestować to rozwiązanie i w tym tekście postaram się przybliżyć do czego doszedłem.
Jak zobaczyłem to pomyślałem, by przetestować to rozwiązanie i w tym tekście postaram się przybliżyć do czego doszedłem.
Realizacja
Po krótkim zastanowieniu doszedłem do wniosku, że potrzebne będą mi trzy tablice. Pierwsza do przechowywania zawartości panelu, druga do zawierająca grafiki wyświetlane w przypadku gdy panel jest aktywny i trzecie z grafikami nieaktywnych paneli.
Mając zmienne nadszedł czas pomyśleć o jakichś funkcjach. Przydała by się jakaś, która odpowiada za zmianę aktywnego panelu.
Do dodawania nowych paneli również napisałem prostą funkcję.
Mając zmienne nadszedł czas pomyśleć o jakichś funkcjach. Przydała by się jakaś, która odpowiada za zmianę aktywnego panelu.
Do dodawania nowych paneli również napisałem prostą funkcję.
<script language="JavaScript">
// tablica z zawartoscia wyswietlanego panelu
var arrayTab = new Array();
// tablica z plikami graficznymi przy aktywnym panelu
var imageTabOn = new Array();
// tablica z plikami graficznymi przy nieaktywnym panelu
var imageTabOff = new Array();
// funkcja to do zmiany aktywnego panelu
function tabSwitch(numTab)
{
var imgName;
// podmiana zawartosci
document.getElementById("currentTab").innerHTML = arrayTab[numTab];
// i petla, ktora ustawia odpowiednie obrazki
for (i = 0; i < arrayTab.length; i++)
{
imgName = "tab" + i;
if (i == numTab)
document.images[imgName].src = imageTabOn[i];
else
document.images[imgName].src = imageTabOff[i];
}
}
// dodanie nowego panela
function addTab(text, imageOn, imageOff)
{
arrayTab.push(text);
imageTabOn.push(imageOn);
imageTabOff.push(imageOff);
}
</script>
Kod co nieco może "toporny" ale działa. Następny krok to dodanie przykładowych paneli , tzn. zawartości oraz grafik.
<script>
// utworzenie 3 paneli
var p1 = ' \
<p> \
tekst nr 1<br><b>test</b> \
</p>';
var p2 = ' \
<p> \
tekst nr 2 \
</p>';
var p3 = ' \
<p> \
tekst nr 3 <br> \
z obrazkiem <img src="/china1/img/code/tab1_off.jpg"> \
</p>';
addTab(p1, "/china1/img/code/tab1_on.jpg", "/china1/img/code/tab1_off.jpg");
addTab(p2, "/china1/img/code/tab1_on.jpg", "/china1/img/code/tab1_off.jpg");
addTab(p3, "/china1/img/code/tab3_on.jpg", "/china1/img/code/tab3_off.jpg");
</script>
Teraz przydało by się coś zobaczyć i przyszedł czas na kawałek kodu html, który zamieszczony na stronie odpowiada za wyświetlanie panelu.
<!-- kod html panela (tabelka) -->
<a name="tabPanel">
<table border="0">
<tr>
<td align="left">
<a href="#tabPanel" onClick="tabSwitch(0);">
<img name="tab0" src="/china1/img/code/tab1_off.jpg" border="1"></a>
<a href="#tabPanel" onClick="tabSwitch(1);">
<img name="tab1" src="/china1/img/code/tab2_off.jpg" border="1"></a>
<a href="#tabPanel" onClick="tabSwitch(2);">
<img name="tab2" src="/china1/img/code/tab3_off.jpg" border="1"></a>
</td>
</tr>
<tr>
<td style="background: #ececff; border: solid 1px #0000ff; padding: 5px;">
<!-- wlasciwa zawartosc panela -->
<div id=currentTab style="height: 200px;">
nic
</div>
</td>
</tr>
</table>
<!-- koniec panela -->
Jeszcze tylko zainicjowanie panela startowego.
<script>
// przelaczenie na panel poczatkowy
tabSwitch(0);
</script>
Przykład w działaniu