Witam!
Zaczynam przygode z JS. Napalilem sie na zrobienie galerii zdjec takiej jak np. na stronie Nickelbacka (http://www.nickelback.com/). Na raze chcialem zrobic tylko jedna warstwe, ktora bedzie sie rozszezac lub zmniejszac w zaleznosci od wielkosci zdjecia. Napotkalem jednak na swojej drodze wiele trudnosci wiec licze ze mi pomozecie. Oto kod:
<?php
function initial(nazwa_gal, ilosc_zdj)
{
//zapamietujemy ilosc zdjec do zmiennej globalnej
ilosc_zdjec = ilosc_zdj;
//tworzymy liste nazw zdjec
for(i=1; i<=ilosc_zdj; i++)
{
if(i<10)
lista[i] = nazwa_gal+"0"+i+".jpg";
else
lista[i] = nazwa_gal+i+".jpg";
}
//ustawiamy widocznosc warstwy
document.all['gal_layer'].style.visibility = "visible";
}
{
//sprawdzamy czy nie wyszlismy poza zakres listy zdjec
if(aktualne_zdj > 1)
aktualne_zdj--;
//skalujemy warstwe pod zdjecie
skalowanie(aktualne_zdj);
//zmieniamy zdjecie
document.getElementById("obrazek").src = lista[aktualne_zdj];
}
{
//sprawdzamy czy nie wyszlismy poza zakres listy zdjec
if(aktualne_zdj < ilosc_zdjec)
aktualne_zdj++;
//skalujemy warstwe pod zdjecie
skalowanie(aktualne_zdj);
//zmieniamy zdjecie
document.getElementById("obrazek").src = lista[aktualne_zdj];
}
function skalowanie(numer_zdj)
{
var img = new Image();
img.src = lista[numer_zdj];
nowy_width = img.width + 20;
nowy_height = img.height + 100;
//document.all['gal_layer'].style.left = 500 - (img.width/2);
//ustawiamy wielkosc warstwy wzgledem obrazka
document.all['gal_layer'].style.width = nowy_width;
//document.all['gal_layer'].style.height = nowy_height;
//moving(nowy_height);
stary_height = document.all['gal_layer'].offsetHeight;
alert("stary: "+stary_height+", nowy: "+nowy_height);
if(stary_height > nowy_height)
{
alert("poMniejszam")
zmien_rozmiar(nowy_height, 0)
}
else
{
alert("poWiekszam")
zmien_rozmiar(nowy_height, 1)
}
//ustawiamy clip warstwy wzgledem obrazka
document.all['gal_layer'].style.clip = "rect(0px,"+nowy_width+"px,"+nowy_height+"px,0px)";
}
function zmien_rozmiar(nowy_height, kierunek)
{
//pobieramy aktualna wysokosc warstwy
stary_height = document.all['gal_layer'].offsetHeight;
//jezeli wysokosci sie nie zrownaly dodajemy lub odejmujemy
if(stary_height != nowy_height)
{
if(kierunek == 0)
document.all['gal_layer'].style.height = stary_height - 1;
if(kierunek == 1)
document.all['gal_layer'].style.height = stary_height + 1;
}
//przechowujemy zmienne bo sie gubia (nie wiem dlaczego)
war = nowy_height;
wat = kierunek;
//wywolujemy kolejny raz funkcje zmien_rozmiar
setTimeout('zmien_rozmiar(war, wat)', 100);
}
?>
Idea jest taka. Na poczatku inicjalizujemy galerie, ustawiamy warstwe i robimy liste zdjec do przegladniecia. Klikajac next odpalamy funkcje, ktora powinna zeskalowac warstwe pod odpowiednie zdjecie i je pozniej wyswietlic. Na razie skrypt napisany tylko pod wysokosc zdjecia.
Problemy:
- przegladajac galerie, jezeli trafimy na wieksze zdjecie od poprzedniego warstwa ladnie sie zeskaluje animujac, kiedy jednak trafimy na mniejsze zdjecie juz nie chce sie animowac tylko automatycznie skaluje.
- sadzac po kodzie myslalem, ze warstwa najpierw bedzie sie skalowac pod odpowiednie zdjecie dopiero pozniej je zaladuje jednak jak zauwazylem wcale sie tak to nie odbywa.
- narazie testuje to pod IE pod firefoxem radze nie ruszac

Wybaczcie ze w kodzi znajduje sie troche dziwnych zakomentowanych linijek ale kombinowale juz na rozne sposoby i balem sie czegos nie usuwac zeby nie spieprzyc czegos na amen

Mam nadzieje, ze znajdzie sie ktos cierpliwy i wytlumacz mi kilka spraw
Pozdrawiam i licze na wsparcie!
Polik