[js] skrypt galerii

0

Z powodu ograniczeń technologicznych musiałem napisać skrypt obsługujący galerie w js a nie w php. No ale o co chodzi, więc ...

do pamięci podręcznej wczytywany jest obrazek "ładowanie grafiki" i pusty obrazek 1px x 1px. Na stronie wyświetlane jest 10 obrazków 120px x 90px. Nad obrazkami znajduje się menu nawigacyjne. A teraz jak to działa.

Na początku wczytywane są dwa obrazki: ładownie grafiki i pusty obrazek. Pozniej generowane jest menu. Wyglądające następująco. Jeżeli zmienna co (przy ładowaniu strony ustawiona na 0) nie jest 0 to wpisuje link do strony galerii poprzedniej. Pozniej wypisuje numer aktualnej strony. Pozniej sprawdza czy pierwszy plik z nastepnej strony istnieje. Jeżeli tak to wyswietla link Nastepna strona. Potem tworzona jest tabela z galeria (10 zdjec wczytywane do pamieci podrecznej), przed wczytaniem obrazkow umieszczony zostaje na ich miejscu obrazek ładowanie grafiki. Po załadowaniu obraków pokazuja sie one na stronie.

Tym sposobem nie musze odswieżać całej strony tylko jej fragment.

Ale pojawił się problem:
O ile pierwsze 10 obrazków i kolejne 10 obrazków jest wczytywane dobrze to np jak chce przejsc juz do strony 3 to nie wyswietlaja mi sie wszystkie obrazki, i napisu nastepna strona tez nie ma (a obrazków mam 145). Nastepnie jak np wroce do strony 2. galerii i potem znowy do 3. to mam link do strony 4. galerii i obrazki mam wszystkie zaladowane na stronie 3. a po powrocie do strony 1. nie wczytuja sie wszystkie obrazki. Czasami tez mam tak, że pomimo ze pojawia sie pusty obrazek to link prowadzi do właściwego obrazka.

A oto kod skryptu

<html> <head> <title></title> <script language="javascript" type="text/javascript"> </script> </head> <body onload="start()">
<noscript> Do działania galeri potrzebna jest włączona obsługa javascript. </noscript>
</body> </html> ```
0

Po pierwsze: Następnym razem uzywaj znacznika ``` zamiast <quote>`...

Po drugie: Gdzie jest DTD? Po kodzie poznaję, że to HTML 4.01 Transitional. Wypadałoby zadeklarować.

Po trzecie:

var img0 = new Image(120,90);
img0.src = 'zd/' + ile + '0.jpg';
if(img0.complete) {
document.getElementById('ob0').src=img0.src;
var aimg0 = 'zd/big_' + ile + '0.jpg';
document.getElementById('aob0').href=aimg0;
document.getElementById('aob0').target="bigob";
} else {document.getElementById('ob0').src=ob_blank.src;}

// tutaj jeszcze raz ten sam kod
// i jeszcze raz
// i tak 10 razy

Użyj pętli for.

I po piąte ten kodzik nie jest z pewnością zgodny ze wszystkimi przeglądarkami. Pod Firefoksem mogę przejść na każdą stronę, niezależnie od tego ile jest obrazków (bo Firefox nie ładuje obrazka, jeśli stwierdzi, że nie istnieje), w dodatku w miejscu pustego obrazka widzę obrazek "ładowanie" (z tego samego powodu).

Co do tego, że pokazuje pusty obrazek - obrazki ładują się dopiero po zakończeniu wykonywania kodu w znaczniku <script>. Więc zanim przeglądarka zacznie ładowanie, już zmieniasz atrybut src...

Możesz spróbować XMLHTTP - wysyłasz żądanie HEAD, jak dostajesz 200 - ładujesz, jak 404 - pokazujesz obrazek pusty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1