Načítanie stránky trochu inak

23. listopadu 2001

Možno sa vám už niekedy stalo, že ste robili stránku, ktorá obsahovala obrázky, ktoré sa pri nejakej príležitosti menili (napr. menu), alebo stránku obsahujúcu väčšie množstvo obrázkov. No a v takom prípade bolo niekedy na škodu, že sa stránka vykresľovala postupne, alebo v prípade menu, ak sa obrázky menili a vtedy, ak bol nad nimi kurzor myši, tak sa tie obrázky chvíľu doťahovali.

Podobné veci postretli aj mňa, a preto ma napadlo, že môžem tomuto predísť tak, že stránku načítam „na pozadí“, zatiaľ, čo na monitore bude informácia o tom, že stránka sa načítava.

Rozhodol som sa, že použijem vymoženosti dnešnej doby, t.j. Document Object Model, JavaScript a kaskádové štýly (CSS). To znamená, že funkčnosť bude mierne obmedzená, resp. s novými prehliadačmi, Internet Explorer 5.0+ (pravdepodobne aj s IE 4.1 by ste nemali mať problém, ale netestoval som to), Netscape 6.x, Mozilla 0.9.x a Opera 5.x nebudete mať problém.

V príklade vám ukážem ako to funguje. Príklad načítava jeden väčší obrázok, ale nie postupne. Kým sa načítava obrázok, tak užívateľ vidí informáciu o načítavaní. V momente ako sa obrázok celý načíta, tak oznam zmizne a obrázok sa ukáže okamžite.

Príklady som urobil dva. Prvý príklad je pre tých, ktorí si pozerajú tieto stránky cez dial-up spojenie, resp. obrázok má 260kb. Druhý príklad je naopak pre tých ktorí používajú pevnú linku, prípadne iné rýchlejšie spojenie (obr. má cca 680kb).

Princíp fungovania je veľmi jednoduchý. Ide o to, že sa urobí (napíše) úplne klasicky celá stránka, resp. napíše sa celý (ľubovoľný) HTML kód. Jediným rozdielom je to, že tomuto kódu sa priradí atribút hidden (pomocou JavaScriptu a DOM-u), resp. tento kód sa skryje na čas potrebný pre jeho vykreslenie. A počas načítavania tohoto kódu bude na obrazovke informácia o načítavaní, alebo iná informácia.

Teda HTML kód v tagu body vyzerá takto:

&ltbody onLoad=“Inicializacia();“&gt
  &lt!– Prva cast – upozornenie na nacitanie stranky –&gt
  &ltdiv align=“center“&gt
   &ltp class=“upz“ id=“upozornenie“&gt
  &ltbr&gt
   Stránka sa nahráva. Čakajte prosím…
  &ltbr&gt 
   &lt/p&gt
  &lt/div&gt
  &lt!– Druha cast – zvysok stranky –&gt
  &ltdiv id=“uvod“ style=“visibility: hidden;“ align = „center“&gt
   &ltimg src=“pr1.jpg“&gt
   &ltbr&gt
   &lth2&gtveľkosť obrázku cca 460kb&lt/h2&gt
  &lt/div&gt
&lt/body&gt

Teda celý HTML kód je rozdelený na dve časti. Prvú časť

&ltdiv align=“center“&gt
   &ltp class=“upz“ id=“upozornenie“&gt
   &ltbr&gt
   Stránka sa nahráva. Čakajte prosím…
   &ltbr&gt 
   &lt/p&gt
&lt/div&gt

tvorí vycentrovaný odstavec, ktorý má priradené ID upozornenie. Jeho spracovanie je na vás, ja tom so riesil pomocou kaskádových štýlov (CSS) v triede upz. Tú popisovať nebudem, jej kód si môžete pozrieť v príklade.

V druhej časti

&ltdiv id=“uvod“ style=“visibility: hidden;“ align = „center“&gt
   &ltimg src=“pr1.jpg“&gt
   &ltbr&gt
   &lth2&gtveľkosť obrázku cca XXXkb&lt/h2&gt
&lt/div&gt

sa nachádza zvyšok stránky. V podstate je tu všetko to, čo má stránka podľa vás obsahovať. Jediný rozdiel je v tom, že som tejto časti priradil atribút hidden, aby sa táto časť kódu hneď nevykresľovala. Tak isto som jej priradil vlastné ID, konrétne uvod.

Čiže stránka sa nahráva, ale nie je vidieť vykresľovanie, lebo tá časť má atribút hidden. No a teraz už iba stačí zabezpečiť, aby keď sa stránka celá načíta, aby zmizol nápis o nahrávaní a zároveň sa objavil požadovaný obsah.

Dá sa to urobiť veľmi jednoducho. Použijem atribút onLoad v tagu body a zavolám ním funkciu Inicializacia():

&ltbody onLoad=“Inicializacia();“&gt

Samotná funkcia Inicializacia()

function Inicializacia()
{
   document.getElementById(„uvod“).style.visibility = „visible“;
   document.getElementById(„upozornenie“).style.visibility = „hidden“;
}

iba zmení atribút hidden na visible druhej časti HTML kódu a naopak pri prvej časti.

Dúfam, že vám to bolo zrozumiteľné a prajem príjemný deň.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *