Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS][CSS] Przegladarka zdjec
Forum PHP.pl > Forum > Po stronie przeglądarki
Polik
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:

  1. <?php
  2. function initial(nazwa_gal, ilosc_zdj) 
  3. {
  4. //zapamietujemy ilosc zdjec do zmiennej globalnej
  5. ilosc_zdjec = ilosc_zdj;
  6.  
  7. //tworzymy liste nazw zdjec
  8. for(i=1; i<=ilosc_zdj; i++)
  9. {
  10. if(i<10)
  11. lista[i] = nazwa_gal+"0"+i+".jpg";
  12. else
  13. lista[i] = nazwa_gal+i+".jpg";
  14. }
  15.  
  16. //ustawiamy widocznosc warstwy
  17. document.all['gal_layer'].style.visibility = "visible";
  18.  
  19. next();
  20. }
  21.  
  22. function prev()
  23. {
  24. //sprawdzamy czy nie wyszlismy poza zakres listy zdjec
  25. if(aktualne_zdj > 1)
  26. aktualne_zdj--;
  27.  
  28. //skalujemy warstwe pod zdjecie
  29. skalowanie(aktualne_zdj);
  30.  
  31. //zmieniamy zdjecie
  32. document.getElementById("obrazek").src = lista[aktualne_zdj];
  33. }
  34.  
  35. function next()
  36. {
  37. //sprawdzamy czy nie wyszlismy poza zakres listy zdjec
  38. if(aktualne_zdj < ilosc_zdjec)
  39. aktualne_zdj++;
  40.  
  41. //skalujemy warstwe pod zdjecie
  42. skalowanie(aktualne_zdj);
  43.  
  44. //zmieniamy zdjecie
  45. document.getElementById("obrazek").src = lista[aktualne_zdj];
  46. }
  47.  
  48. function skalowanie(numer_zdj)
  49. {
  50. var img = new Image();
  51. img.src = lista[numer_zdj];
  52.  
  53. nowy_width = img.width + 20;
  54. nowy_height = img.height + 100;
  55.  
  56.  
  57. //document.all['gal_layer'].style.left = 500 - (img.width/2);
  58.  
  59. //ustawiamy wielkosc warstwy wzgledem obrazka
  60. document.all['gal_layer'].style.width = nowy_width;
  61.  
  62.  
  63. //document.all['gal_layer'].style.height = nowy_height;
  64. //moving(nowy_height);
  65.  
  66. stary_height = document.all['gal_layer'].offsetHeight;
  67. alert("stary: "+stary_height+", nowy: "+nowy_height);
  68.  
  69.  
  70. if(stary_height > nowy_height)
  71. {
  72. alert("poMniejszam")
  73. zmien_rozmiar(nowy_height, 0)
  74. }
  75. else
  76. {
  77. alert("poWiekszam")
  78. zmien_rozmiar(nowy_height, 1)
  79. }
  80.  
  81. //ustawiamy clip warstwy wzgledem obrazka
  82. document.all['gal_layer'].style.clip = "rect(0px,"+nowy_width+"px,"+nowy_height+"px,0px)";
  83. }
  84.  
  85. function zmien_rozmiar(nowy_height, kierunek) 
  86. {
  87. //pobieramy aktualna wysokosc warstwy
  88. stary_height = document.all['gal_layer'].offsetHeight;
  89.  
  90. //jezeli wysokosci sie nie zrownaly dodajemy lub odejmujemy
  91. if(stary_height != nowy_height)
  92. {
  93. if(kierunek == 0)
  94. document.all['gal_layer'].style.height = stary_height - 1;
  95. if(kierunek == 1)
  96. document.all['gal_layer'].style.height = stary_height + 1;
  97. }
  98.  
  99. //przechowujemy zmienne bo sie gubia (nie wiem dlaczego)
  100. war = nowy_height;
  101. wat = kierunek;
  102.  
  103. //wywolujemy kolejny raz funkcje zmien_rozmiar
  104. setTimeout('zmien_rozmiar(war, wat)', 100);
  105. }
  106. ?>


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 smile.gif

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 smile.gif

Mam nadzieje, ze znajdzie sie ktos cierpliwy i wytlumacz mi kilka spraw
Pozdrawiam i licze na wsparcie!
Polik
abc667
fajnie że chcesz zrobić coś sam ale wpisz sobie w google lightbox2
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.