Autor | Zpráva | ||
---|---|---|---|
Suta Profil |
#1 · Zasláno: 8. 1. 2010, 16:53:57 · Upravil/a: Suta
Chci se zeptat, čím je ovlivněn průběh funkcí setTimeout (v cyklu) či setInterval. Resp. čím může být zapříčiněno nedodržování nastavených časových intervalů.
Uvedu konkrétné příklad. Nedávnou jsem si pro vlastní zdokonalení v javascriptu naprogramoval jednoduchý pinball. 1. Měl jsem div určité šířky. 2. V něm jsem pomocí setInterval() spustil pohyb kuličky, která vždy po dosáhnutí hrany divu změnila směr. Tedy neustále se pohybovala uvnitř divu. Bohužel prohlížeč nedodržoval naprosto přesné dodržování intervalu, takže pohyb kuličky nebyl plynulý. Někdy se znenadání kulička zrychlila, jindy zpomalila... Nyní řeším podobný případ, kdy spouštím funkci, která nastavuje v cyklu opacity a prvek zmizí / zobrazí se. Opět však provedení operace není plynulé, pokaždé dojde k jinak rychlému proběhnutí cyklu. Čím to může být zapříčiněno a jak dosáhnout v javascriptu naprosto přesného dodržování spouštěných operací? Díky moc za radu. |
||
ah01 Profil |
#2 · Zasláno: 8. 1. 2010, 17:11:11
|
||
Suta Profil |
#3 · Zasláno: 8. 1. 2010, 17:47:01 · Upravil/a: Suta
ah01:
Díky moc za odkaz. Nevěděl jsem, že je takový rozdíl mezi setTimeout volaném v cyklu a setInterval. Angličtinu ovládám velmi okrajově, ale snad jsem pochopil správně, že (můj výklad): - každé provedení funkce spuštěné pomocí setTimeout je závislé na dalších probíhajících (či skrytých) operacích, takže požadované spuštění po 10 milisekundách bude reálně spuštěno buď později, nebo v případě nahromaděných požadavků ve frontě rychleji za sebou, - zatímco použití setInterval se "pokusí" spouštět požadovanou funkci přesně každých 10 milisekund. Z toho mi vyplývá, že použití setInterval je pro "animaci" výhodnější. Pozn.: skutečně jsem nyní zkusil vyměnit setTimeout za setInterval a efekty mi probíhají daleko plynuleji! Chápu to správně? |
||
Časová prodleva: 14 let
|
0