setTimeout / setInterval: melyiket ajánlott használni?
Sziasztok!
Azt szeretném megérdeklődni, hogy a setTimeout() megoldást manapság még szokás-e használni JavaScriptben és ha igen, milyen feladathoz ajánlott?
Illetve a kérdésem másik része, hogy különbözik-e tőle a setInterval() és ha igen, akkor mi a különbség a kettő között?
Köszönöm..
■ Azt szeretném megérdeklődni, hogy a setTimeout() megoldást manapság még szokás-e használni JavaScriptben és ha igen, milyen feladathoz ajánlott?
Illetve a kérdésem másik része, hogy különbözik-e tőle a setInterval() és ha igen, akkor mi a különbség a kettő között?
Köszönöm..
Persze, hogy különbözik
requestAnimationFrame for
nem vált be
Azaz magyarul kb. a lényeg
a fenti linken ez azért nem látszik, mert ott az unix timestamp adja a pozicióját (sin/cos paramétereként) a piros pöttynek.
Köszi az infót. Kis
ez igaz
1, nem igazán értem, mert én
2, ne abból induljunk ki, hogy a böngészők jelenleg hibásan kezelik az animation frame-et, később ez még jó lehet, azaz jó tudni, hogy ilyen is létezik
3, ne használj animációt, mert energiapazarló és kontraproduktív; gondolj bele, hogy 450 millióan használják a Windows 7-et, naponta hány gigawatt energia és hányezer munkaóra megy el az animációkra várva
Mindkettőt
setInterval
-t használni. Az olyan ismétlődő folyamatokhoz, amik sokáig tarthatnak, érdemesebb inkább minden lépés után egy újabbsetTimeout
-ot indítani. Ilyen folyamatok például az AJAX kérések, összetett számítások, bonyolultabb DOM manipulációk. Ezen kívül asetTimeout
-tal figyelhetünk aszinkron folyamatokat, mint például egy kép más forrás betöltődését. És ha nem érkezik meg az adat mondjuk 10 másodpercen belül, akkor figyelmeztethetjük erről a felhasználót.Komplex animáció minden böngészőre
Amikor megjelenítem a képgalériát akkor ugyanaz a függvény 5 időzített feladatot próbál egyszerre teljesíteni az oldalon setTimeout() segítségével (lábléc és fejléc magasságának változtatása, a képgalériában 2db doboz magasságának és 1db doboz szélességének megjelenítése).
És ez a komplett animáció firefoxban (operában, safariban sem tökéletes) szakadozva fut le, nem tudja tartani azt a sebességet, amire szükségem lenne.
Google chromeban ugyanez dinamikusan és gyönyörűen működik!
Ha pedig firefoxban letiltom a fejléc és lábléc időzítését akkor a galériára vonatkozó maradék 3 elem méretének növelése már ott is dinamikusan végbemegy.
A firefoxnak tehát túl sok az egyszerre öt kérés dinamikus teljesítése?? Vagy van arra megoldás, hogy komplettebb (akadásmentes) animációkat készítsünk, ami nem csak chromeban működik?
Az egyébként normális tőlem, hogy ugyanazzal a függvénnyel növelem egyszerre 4 különböző elem magasságát és 1 elem szélességét? És mind az öt különböző elemre ugyanaz az ID (animacioID=setTimeout..) vonatkozik? Vagy nagyon elvagyok tévedve?
Az animáció amivel próbálkoztam itt látható: www.moviestouch.com
A főoldalon bármelyik képre kell kattintani, aztán a megjelenő adatlapon bármelyik kis fotóra kattintva megnyílik a galéria.
Sok másik hiba
setTimeout
okozza nálad a hibát, hanem hogy a kód nagyon messze van az optimálistól. Miért kérsz le minden futás esetében minden elemet a DOM-ból? Miért nem tárolod őket változókban? Miért adsz át stringet a setTimeout-nak? Miért használod a Function objektumot? Ilyen, és ehhez hasonló problémák okozzák azt, hogy az animációd szaggatni fog.2 utolsó kérdés
Nem akarom itt és most a Ti időtöket vesztegetve kiokíttatni magam, csak még két utolsó kérdést hagy tegyek fel, amire a válasz más olvasók számára is hasznos lehet:
Az egyik, hogy mi az optimális megoldás a Function használata helyett?
A másik pedig, hogy pontosan mit értesz az alatt, hogy miért adok át stringet a setTimeoutnak? Erre a formára gondolsz pl. mint hibás megfogalmazás: setTimeout("FÜGGVÉNYNÉV(PARAMÉTEREK);",50); ? Mert e tekintetben pontosan nem értem, hogy miben van a probléma.
Nagyon köszönöm, ha még ezekkel kisegítesz, aztán több kérdést fel sem teszek addig amíg egy optimális kódot nem írtam végre. MEGÍGÉREM!!
eval is the root of evil
ezért amennyiben lehet, el kell kerülni a használatát. És minden olyan esetben, ahol te egy stringet adsz meg, mint futtatható kód, ott lényegében eval hívás történik. Például:
Hasonló a helyzet a setTimeout-tal is.
Nagyon hálás vagyok
ELVONULTAM OPTIMALIZÁLNI A KÓDOT... amíg ez nincs meg addig nem tudnék már nyugodtan aludni.
Ezer köszönet még egyszer a segítségért, nem is beszélve a példákról!!
csúnya setTimeout
setTimeout("document.getElementById('nev').onclick=closeThis",50);
???