ugrás a tartalomhoz

js: betöltés alatt loader anim

demo · 2008. Már. 15. (Szo), 01.05
Sziasztok!

Van nekem egy egész sor thumbnail képecském, illetve a hozzá tartozó nagyobbacska kép egy darab htmlbe.
(hogy mér egybe az most nem lényeges)
Szekvenciálisan előbb a nagyobb képek töltődnek le sorban, aztán a kisképek...
Ez ugye míg betölt.. hát eltelik egy kis idő. Ezalatt szeretnék én megbírni egy loader animot.
AS2.0 -ből jöttem, jsbe sajnos nem tudom megfogni az eseményt.

onload tán? az összes thumbnailre? és az utolsót vizsgáljam?
tehát kirakom a loadert egyből, és ha az utolsó thumbnail is onload, akkor leveszem?
Egyébként elemet törölni lehet futásidőben, vagy csak display none?

Köszi
 
1

A téma engem is érdekel.

s_volenszki · 2008. Már. 15. (Szo), 14.07
Mivel én is szeretnék hasonlót, készíteni, illetve van is hasonló szkritptem, de nem tökéletes, ezért erősen kagylózom a fejleményeket!

Az enyém ilyesmi:

Nekem azt kellett megoldani, hogy kliensre lejusson 400-500db 65x65px méretű ikonképecske. A következőket tettem:

- Betöltöm az oldalt képek nélkül.
- AJAX-sza kiolvasom a thumbnail könyvtárban található összes képfájl nevét, és lehurcolom kliensre,
- majd egyesével preload-olom és hozzáfűzöm a konténerhez, miközben egy progressbar jelzi az állapotot

Ez így nagyon jól működik, a probléma az, hogy az előtöltés ellenére a progressbar hamarabb végez, minthogy a képek betöltődnének. Valószínüleg az előtöltés körül van valami bibi!

s_volenszki
2

ez a nyerő

rrd · 2008. Már. 15. (Szo), 15.09
Igen, kb ezek a lépések amik szükségesek a dologhoz. Azon meg ne lepődj meg, hogy nem tudsz egy progressbart tökéletesre megalkotni. Ez egyenlőre még se az MS-nek, se a Mac-nek nem sikerült. Szóval szerintem neked se fog :)
Áthidaló megoldásként én egy körkörösen forgó animációt javaslok, ami nem mutatja, hogy hány %-on áll az ügy.

Más kérdés, hogy 500-600 kép között navigálni nem egy leányálom, szóval lehet, hogy érdemesebb lenne szétbontani több fázisra.
4

igaz, hogy nem sok keppel

ksgy · 2008. Már. 15. (Szo), 19.54
igaz, hogy nem sok keppel kellett megkuzdenem, de nekem ahogy nezem jol mukodik a dolog, itt
5

Igaz.

s_volenszki · 2008. Már. 17. (H), 11.09
Igen valóban igazad van a szétbontással kapcsolatban, azonban egy teljesen egyedi igényről volt szó, ahol is kellenek a képek egyszerre (egy memória fejlesztő játék, amolyan keresd a párját 15x30 raszterban).

Az én állapotjelzőm darabra megy. Kiírja, hogy 0/450 és amikor a js preloadolt egyet, akkor hozzáfűzi a konténerhez (appendChild) majd emeli a számlálót. Az itt jelentkező hiba az, hogy az állapot jelző rég végez, mikor még az utolsó sorokban mozgolódnak a képek.

Bizonyára előfordulhat, hogy a képelőtöltésemmel van a probléma.

Az állapotjelzőtől eltekintve azért had kérdezem meg, ha van egy megfelelően megírt JS imagePreload függvény, annak nem az lenne a célja, hogy létrehozunk egy amolyan imgLoaded "eseményt"?

s_volenszki
7

mikor emeled?

ksgy · 2008. Már. 17. (H), 18.30
mikor noveled a szamlalot? az appendchild utan ala natur, vagy az img.onload-jabol?
8

Rekurzív...

s_volenszki · 2008. Már. 17. (H), 18.42
..mert ha ciklusban csinálom akkor ugye nincs kimenet amíg véget nem ért (js-ben nem ismerek output buffering-et), így az append után emelem a számlálót és azzal hívom meg újra a függvényt.

Az "ala natur"-ból ítélve nem ez lehet a legjobb megoldás?!

s_volenszki
9

en valahogy igy gondoltam

ksgy · 2008. Már. 18. (K), 00.00
en valahogy igy gondoltam:
  1. var i=0;  
  2. function rekurzivKepbetolto(attrib_i) {  
  3.    ... /* img letrehozasa */  
  4.    img.onload=function(){  
  5.          i++;  
  6.          loadingdiv.innerHTML=i+' kep betoltve a 156-bol';  
  7.          rekurzivKepbetolto(i);  
  8.    }  
  9.    img.src='valami'+attrib_i+'.jpg';  
  10.    kontenerdiv.appendChild(img);  
  11. }  
11

Hogyan?

Velias9 · 2008. Már. 27. (Cs), 16.48
Valamit nem értek. Ha a 'kontenerdiv.appendChild(img)' sorral hozzáadod egy 'div'-hez, akkor az a kép hogyan kerül a helyére (mármint a DOM-ban)?
Légyszives magyarázd el ezt részletesen!

Köszi!
12

nemertem a kerdest :)

ksgy · 2008. Már. 27. (Cs), 17.08
nemertem a kerdest :)
a kontenerdiv pl:
  1. var kontenerdiv=document.getElementById('kontener');  
A hozza tartozo html:
  1. ...  
  2. <div id="kontener"></div>  
  3. ...  
A generalt DOM az appendChild utan:
  1. ...  
  2. <div id="kontener">  
  3.      <img src="valami1.jpg" />  
  4. </div>  
  5. ...  
13

Arra gondoltam

Velias9 · 2008. Már. 27. (Cs), 19.40
..., ha van egy ilyen forráskódod:
  1. ...  
  2.   
  3. <div id="valami1">  
  4. <!-- ide kéne egy kép -->  
  5. </div>  
  6. <div id="valami2">  
  7. <!-- ide is kéne egy kép -->  
  8. </div>  
  9.   
  10. ...  
, akkor mind a két 'div'-hez külön kell 'appendChild'-del hozzáadni a képet?
Valahogy így?
  1. ...  
  2.   
  3. var kontenerdiv = document.getElementById('valami1');  
  4. kontenerdiv.appendChild(img1);  
  5. var kontenerdiv = document.getElementById('valami2');  
  6. kontenerdiv.appendChild(img2);  
  7.   
  8. ...  
Ez így mind OK, de ha pl több száz képet kéne ilyen módon előtölteni, akkor mi van?
14

ciklus

ksgy · 2008. Már. 27. (Cs), 23.25
ciklust erre talaltak ki tobbekozt ;)
  1. ...  
  2. var img=new Array();  
  3. // ciklussal img tomb feltolt a kepekkel  
  4.   
  5. for(i=0;i<img.length-1;i++){  
  6.    document.getElementById('valami'+i).appendChild(img[i]);  
  7. }  
  8. ...  
...vagy, ha megnezed a fentebb irt kodot, akkor az rekurziv hivja onmagat, ha egy kep betoltodott, igy nem kell ciklussal bibelodni, hanem a fuggvenyen belul elintezel mindent, es ha kesz, akkor ujrahivod onmagat a kov keppel/kep index-el mint parameter. Ha ciklussal csinalod, akkor ott az lesz a "problema", hogy a kep meg nincs betoltve, de te mar becsatolod a DOM-ba, igy ott egy kep helyorzo jelenik meg, majd ahogy betoltodott a kep, ugy jelenik meg.

szerk add: itt az elotoltes a lenyeg, ha megnezed fentebb, a DOM-ba csatolas mar csak akkor tortenik meg, ha az onload lefutott, tehat ha a kepet a bongeszo letoltotte.

szerk2 add: asszem felfogtam vegul, hogy mi a kerdesed lenyege:
  1. var i=0;  
  2. function rekurzivKepbetolto(attrib_i) {  
  3.    ... /* img letrehozasa */  
  4.    img.onload=function(){  
  5.          i++;  
  6.          loadingdiv.innerHTML=i+' kep betoltve a 156-bol';  
  7.          rekurzivKepbetolto(i);  
  8.    }  
  9.    img.src='valami'+attrib_i+'.jpg';  
  10.    document.getElementById('divAhovaAKepMegy'+attrib_i).appendChild(img); // pl igy, de az attrib_i helyett mas valtozo is megadhato termeszetesen, hogy hova keruljon, ezt mar te tudod, hogy mijen rendszerben vannak a divek es kepek :)  
  11. }  
15

Lehet, hogy triviális, de ...

Velias9 · 2008. Már. 28. (P), 14.51
... én sajna nem tudom, hogy hogyan kell létrehozni az img elemet. Valahogy így kell?:
  1. ...  
  2.   
  3. var img = document.createElement("img");  
  4.   
  5. ...  
Vagy valami más, amire nem gondoltam.

A másik, hogy AJAX-szal hogyan töltök le egy képet? Csak simán kérem a server-től és ennyi? Nem kell semmit trükközni, vagy ilyesmi?

Tudom, hogy problémás vagyok néha és nehéz felfogású, de remélem segítetek. Az eddigi és a további segítségeket is nagyon szépen köszönöm!
16

itt

ksgy · 2008. Már. 28. (P), 15.50
akkor kezdd itt, nagyon jol ertheto tutorial, aztan itt weblaboron is van ket nagyon jokis cikk JS-rol, tovabba ajanlott "olvasmanyok" itt (a 2. oszlop leginkabb)
ha ezeken tulvagy, es van tovabbi kerdes, akkor johet :)
17

ajax, meg dom elem létrehozás

rrd · 2008. Már. 29. (Szo), 15.30
ajax, meg dom elem létrehozás meg ilyesmiket nem igazán egészséges egyszerre tanulni, mert rettentő mód össze fogsz vele kavarodni.
Ha megvagy az alapokkal, akkor nézz szét a WebMánián találsz mindent ami kell :)
3

script

demo · 2008. Már. 15. (Szo), 16.57
Szia!

És nyilvános ez a script? :)
6

JavaScript kép előtöltés animáció

fly · 2008. Már. 17. (H), 14.40
Nekem itt működik egy ilyen script, anno a www.delerium.com-on volt az eredeti :)
http://fly.pardey.org/civic/
10

köszi

demo · 2008. Már. 22. (Szo), 19.44
... inkább beraktam a loader gifet a képek alá háttérbe.
Azért köszi a segítséget.