2011-06-28 11 views
5

Kiedy tworzę strony z javascriptem, które manipulują stroną, a ta manipulacja ma miejsce przy ładowaniu strony, często dostaję nieprzyjemny efekt migotania.Zatrzymaj miganie javascriptu podczas manipulowania zawartością strony?

Na przykład, gdybym miał akordeon, cała zawartość musiałaby zostać załadowana jako html, a po załadowaniu mogłaby być zapakowana w javascript. Oznacza to, że przez chwilę widoczna jest pełna treść, a następnie "migocze", ponieważ niektóre z nich są ukryte.

Jednym z rozwiązań byłoby ukryć migającą zawartość za pomocą css, a następnie pokazać ją (w razie potrzeby) za pomocą javascript. Problem polega na tym, że strona nie będzie działać poprawnie dla osób bez javascript.

Czy istnieje lepszy sposób? Dzięki

+0

Jakie dokładnie zdarzenie używasz do zainicjowania twojego javascript? Czy to onLoad? – rciq

Odpowiedz

3

myślę normalne podejście do tego celu jest dodanie „js” klasę do ciała jak najszybciej:

<!doctype html> 
... 
<body> 
<script>document.body.className='js';</script> 

Można by wtedy przyjąć pewne reguły CSS w celu zapewnienia treść została ukryta, gdy JS jest dostępny , coś jak.

.js .accordion:nth-child(n+1) { display: none } 
+0

To jest absolutnie najlepsze rozwiązanie. Gotowa funkcja jQuery czeka, aż DOM będzie całkowicie ... gotowy. Jeśli chcesz wykonać szybkie wykonanie elementu, to jest to droga, którą myślę. –

1

Wyjazd this excellent article Paula Irlandczyków - to w zasadzie inwersji opisać metody, ukrywając z CSS aż JS obciążeń. Dodając <script>document.documentElement.className += 'js';</script> do głowy, w zasadzie uzyskujesz korzyści ukrywania treści bez zawartości przed przygotowaniem DOM, a także nie zepsuje się dla tych bez Javascript.

0

Jeśli zmienisz właściwości css po załadowaniu strony, nastąpi takie migotanie. Najlepszym sposobem na sprawienie, aby css miały te same właściwości, którymi manipuluje javascript. W ten sposób zwiększasz efektywność swojej strony, pomijając dodatkowe zmiany/odświeżenia w przeglądarce. Jednak włamanie polega na zminimalizowaniu javascriptu i załadowaniu go przed linią ładowania css.

-1

Nie ma lepszego sposobu na zrobienie tego przy użyciu funkcji stopniowego ulepszania. W pewnym momencie będziesz musiał załadować całą stronę, a następnie użyć javascript, aby ukryć to, czego nie chcesz widzieć. Jednak ponieważ javascript może być wykonywany tylko w DOM, po jego zapisaniu musisz poczekać, aż zostanie on zapisany, zanim będziesz mógł go ukryć. Wydaje się to sprzeczne z intuicją, ale proszę bardzo. To jest cena, którą płacimy za manipulowanie DOM :-)

+0

Możesz wykonać JS nawet zanim DOM jest całkowicie gotowy. Searlea ma odpowiedź poniżej. –

Powiązane problemy