Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> onLoad załadowania obrazka, zdarzenie wywołuje się zbyt szybko
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
siemakuba
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Athlan
post
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


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()">
Go to the top of the page
+Quote Post
siemakuba
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Athlan
post
Post #5





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


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


zleksza nie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
siemakuba
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Athlan
post
Post #7





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


skoro sie pytam to widocznie nie znam sie na tej funkcji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

no tak, działa ale tylko pod IE, nie da się jakoś tego zrobić pod Opere ?
Go to the top of the page
+Quote Post
siemakuba
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Athlan
post
Post #9





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


warto zaznaczyć, że stare IE (IE 4 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) no ale co... testuje sie) wywala błędy że nieznany obiekt (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie prościej by było
Kod
onload="setTimeout('funkcja', nnn)"
?
Go to the top of the page
+Quote Post
LBO
post
Post #11





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Może to Tobie pomoże, działa na większości przeglądarek (przynajmniej rok temu działało (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 16:46