Időzítők JavaScript (setInterval, setTimeout)
A programozás, programozási nyelvek, hogy időről időre szükség van, hogy hozzon létre egy kis szünet - szünetelteti a programot egy ideig, majd tovább. Például, a forgatókönyvek VBS és a PHP lehetséges módszerek:
VBS: wscript.Sleep 1500 (stop 1,5 másodperc)
PHP: alvás (10); (Stop 10 másodpercig)
- i = 1;
- elhalasztja hozzáadása „1” szám a beviteli mező 0,9 másodperc;
- követően azonnal a nyilatkozatot a probléma hurok megy tovább: i = 2;
- elhalasztja a hozzáadásával a „2” szám a beviteli mező 0,9 másodperc;
- .
Azonnal azt jelenti például, 1 ms (azaz aránytalanul kisebb, mint 900 ms) ciklus prozvedot munkája szinte azonnal, ami számos függőben lévő feladatok azonos időpontban. Ez azt jelenti, hogy minden folyamatban lévő feladatok „rajz” lesz végrehajtva szinte ugyanabban az időben, nem lesz közöttük szünet hozzá új számokat. A ciklus kezdődik; minden megáll 0,9 másodperc alatt; és shirrr - minden adat lőttek egy sorban egymás után.
És ebben az esetben a jogot, hogy setTimeout. Ez bonyolult. Majd meg kell hívni egy függvény rekurzívan (belső funkciók ugyanazt a funkciót), és hogy ez a folyamat nem végtelen, meg a stop állapotnak (pl értéke a nyomtatott számok):
És még mindig azt kell inicializálni i változó függvénye - például a következők:
Most minden működik, ahogy kell (már csökkentették a késleltetés 0,9 s 0,4 s). De az ilyen feladatok logikusan még alkalmazni nem setTimeout és setInterval (bár szükség lesz két funkció):
A különlegessége a módszer Javascirpt setInterval, hogy nem megy át „önmagában”, meg kell állítani a speciális módszerrel clearInterval. És világossá tenni, hogy hagyja abba, a probléma a halasztott intézkedés egy azonosító van rendelve - időzítő: window.timer1 = window.setInterval (.).
Azonosítókat lehet hozzárendelni ugyanazokat a feladatokat, és generált setTimeout. Minden azonosítók időzítő különböznie kell egymástól (egyedinek kell lennie az aktuális böngésző ablakban). Ezután létrehozhat egy ablak több különböző feladatokat a halasztott cselekvés, és ezen feladatok párhuzamosan (például ugyanabban az időben, ha a számítógép rendelkezik elegendő forrással), ez alapvetően lehetetlen PHP vagy VBS.
Legördülő menüben
A megtett menü - ténylegesen megtett (alól „sapka”) szándékosan maradt az elemek közötti résekbe, hogy hogyan is elhagyja. Meglepő módon nem tudjuk ugyanazt a sima kilépés különböző hosszúságú listák - valószínűleg alacsony termelékenységének a számítógép (AMD Athlon 999 MHz).
Ez elég nyilvánvaló, hogy a szépség és a harmónia kell sorolni a különböző menüpontok esett egy és ugyanabban az időben. Ez egy hosszú listát kell esnie egy gyorsabb, rövidebb - kisebb ütemben. Úgy tűnik, hogy végre lehessen hajtani az alábbiak szerint:
- Állítsa be a teljes időt „enyhülni”, például, 200 ms.
- Ha a legördülő listából magassága 20 px, akkor nyilvánvaló, hogy tudunk mozogni le, hogy egy képpont a tartományban 10 ms -, majd 200 ms-lista jön ki az egész.
- Ha a legördülő listából magassága 40 px, annak érdekében, hogy felfüggeszti egy időben, meg kell mozgatni, hogy le egy pixel 5 ms.
Ezért többé-kevésbé egyenlővé idő menü enyhülni csak akkor lehetséges a segítségével mankó, és még nem világos, hogy ez működni fog egy gyorsabb számítógép. De mi legyen nézi a leglassabb? Algoritmus (számítógép nélkül sebesség) nagyjából a következő:
- Állítsa be a teljes idő Könnyű A lista: idő = 224 (ms).
- Állítsa be a minimális időintervallum egy ciklusra: delay = 3 (ms).
- Állítsa be a minimális lépése a listán a mozgás: offset = 1 (px).
- Mi változtatni mindezt magasságától függően a lista: 1) növeli a késleltetési időt (intervallum) fordítottan arányos a magasság és közvetlenül arányos a teljes időszakban (magasságban 224 egyenlő 1 arány); 2) ha a magassága nagyobb, mint 40 px, arányosan növekszik a minimális lépés magasságot. Constant „40” empirikusan kapják a legtöbb lassú számítógép. Kimutató vizsgálatokat pontosan Pentium 4 CPU 2.53GHz számítógép ugyanazt a számot - 40. Egyébként az időzítő Hawking, a listák nem megy fel.
Most sorolja többé-kevésbé szabadságra. Többé-kevésbé hasonló időben. A setinterval.htm oldalon.
A funkció is, ad elő beágyazott listákat a menüből, mint látjuk, nagyon egyszerű. Továbbra is csak elindítani ez a sor:
Nos, mielőtt elkezdi csak számítani mindezen maxtop és ofszet, valamint, hogy a lista helyzetben mintop. Pontosan ez az „előzetes” funkció slide () mérete 40 sor. És mindez együtt - setinterval.js fájlt. Igen, és ez a szar nem szar nem fog működni anélkül, hogy a csatlakoztatott fájl menuroll.css stílusokat.