Przygotować funkcje... ognia!
15 marca 2006
Jak wiadomo mój blogasek ma różne niespodziewajki w JavaScripcie. Jak na grzecznego chłopczyka przystało wszystko dodaję przez zdarzenia, a głównie przez jedno - window.onload.
Plus tego jest taki, że ktoś nielubiący albo nieużywający JavaScriptu nadal będzie miał dostęp do zawartości - na przykład ten długi (bez zwinięcia) sidebar. Minus jest dość poważny - skrypt czeka aż załaduje się cała strona, łącznie z obrazkami, których używam we wpisach dość często i dopiero na samiutkim końcu sidebar się zwija, dodają się linki do przeglądania archiwum i inne szmery bajery.
Dzisiaj mi Oskar 1 na to zwrócił uwagę, przytaknąłem, no ale… co dalej? Lecz znalazł rozwiązanie prawie doskonałe, za co stokrotne mu dzięki. Przeglądarki mozillowate umieją coś takiego jak DOMContentLoaded które jest „zdarzeniem” po załadowaniu się całego drzewa DOM, ale bez tych obrazków i innych podczepionych obiektów. Strona ładuje się dzięki temu znacznie szybciej.
Tak więc zbieramy wszystkie funkcje w jedną - u mnie startMagic - i dodajemy przed nimi warunek nie pozwalający wykonać się im dwa razy:
if (arguments.callee.done) return;arguments.callee.done = true;
A startujemy wszystko po prostu tak:
if (document.addEventListener) {document.addEventListener("DOMContentLoaded", startMagic, false);}addEvent(window, "load", startMagic);
addEvent to uniwersalna funkcja dodająca zdarzenie albo na addEventListener dla dobrych przeglądarek albo attachEvent dla kochanego IE 2. :P Jest pierwsza w moim pliku engine.js.
Jest także rozwiązanie dla Internet Explorera, należy użyć flagi defer w <script/>, ale z powodu podpinania zewnętrznych plików .js i potrzeby odpalania funkcji w określonej kolejności nie zastosowałem go jeszcze tutaj.
- 1) Tak jest, pogodzeni. :-) A jego blog się fajnie filmowo-profilowany robi, sprawdźcie sami. ;-)
- 2) Jeśli nadal czytasz tego bloga z Explorera, to zlituj się nade mną maluczkim, proooszę. :)
W wersji 6 bloga (aktualnej) już użyłem kodu dla IE.


