Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: onLoad załadowania obrazka
Forum PHP.pl > Forum > Po stronie przeglądarki
Athlan
chciałem sobie zrobić loading image data na imagesie, ale zdarzenie krycia ramki z loadingiem odbywa się za szybko, otóż, jak mam takie coś:
  1. <img src="..." onLoad="schowaj-ta-glupia-ramke()" />

to akcja wykonuje się nie po załadowaniu obrazka, ale już po załadowaniu w kodzie HTML samego znacznika IMG

co mam zrobić, aby funkcja była wykonana dopiero po całkowitym załadowaniu obrazka?

P.S. guglowałem i te same skrypty co ja zrobiłem sam (czyli onload przy img)
siemakuba
Zdarzenie onload odpala się kiedy załaduje się dany kod HTML, a nie obrazek jak w tym przypadku.
Obiekty mają właściwość readyState, która odpowiada za stopień załadowania danego elementu - 0 - początek do 4 - załadowny. Tej właściwości odpowiada zdarzenie onreadystatechange, które wywoływane jest za każdym razem kiedy zmienia się właściwość readyState. Pozostaje więc dodać eventHandler dla tego zdarzenia, sprawdzać zmianę, i jeżeli osiągniesz stan 'complete' (readyState = 4) odpalać odpowiednią akcję.

Uwaga: zielonego pojęcia nie mam jak to wygląda dla czegokolwiek innego niż IE.

pozdr.
Athlan
Nie wiem czy dobrze rozumem ale mam takie coś:

kod JS:
  1. function loading_preview()
  2. {
  3. if(readyState == 4)
  4. {
  5. // instrukcje
  6. }
  7. }

i wywołanie:
  1. <img src="..." onreadystatechange="loading_preview()">
siemakuba
no mniej wiecej chyba tak. Tyle że powinieneś chyba jeszcze odwolywac sie do obiektu, wiec tak:
Kod
function loading_preview(obj)
{
if(obj.readyState == 4)
{
// instrukcje
}
}

i wywołanie:
  1. <img src="..." onreadystatechange="loading_preview(this)">


pozdr.
Athlan
  1.  
  2.  
  3. <!--
  4. function loading_preview(object)
  5. {
  6. if(object.readyState == 4)
  7. {
  8. alert('załadowano imagesa biggrin.gif');
  9. }
  10. }
  11. //-->
  12.  
  13. </head>
  14.  
  15. <img src="http://www.onet.pl/_m/b733c669d2231d74ffc6c818c05b290a,2,1.jpg" alt="Kaczyński biggrin.gif" onReadyStateChange="loading_preview(this)">
  16. </body>
  17.  
  18. </html>


zleksza nie działa smile.gif
siemakuba
no okej, ja sie pomyliłem :) co nie zmienia faktu, że mogłeś szybciutko złapać gdzie jest error pogrzebany :)

readyState nie zwraca jednak liczby, ale string z określeniem stanu. 4 == 'complete', więc zamiast sprawdzać czy readyState jest równe 4 sprawdzaj czy jest równe 'complete'.

pozdr.
Athlan
skoro sie pytam to widocznie nie znam sie na tej funkcji smile.gif

no tak, działa ale tylko pod IE, nie da się jakoś tego zrobić pod Opere ?
siemakuba
Cytat
skoro sie pytam to widocznie nie znam sie na tej funkcji
nie no luzik :) najwazniejsze ze doszlismy do rozwiazania :)
Cytat
no tak, działa ale tylko pod IE
No tak, tak jak pisalem na poczatku. Akurat ta wlasciwosc jest chyba wymyslona przez MS, wiec na innych przegladarkach nie da rady.... Nie wiem tez czy jest jakis odpowiednik na Mozilla / Opere....

pozdr.
Athlan
warto zaznaczyć, że stare IE (IE 4 tongue.gif no ale co... testuje sie) wywala błędy że nieznany obiekt tongue.gif
erix
A nie prościej by było
Kod
onload="setTimeout('funkcja', nnn)"
?
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.