setTimeout(fn, 0);
Sziasztok,
Egy függvényben azt ellenőrzöm, hogy az adott elem scrollWidth értéke nagyobb-e, mint ugyanennek az elemnek a clientWidth értéke és ennek függvényében hozzáadódik egy class a szülőelemhez, ami módosítja az elrendezést. Ez resize eseményre tökéletesen megvalósul.
Ha azonban a nézetváltáshoz közeli szélességnél frissítem az oldalt, mikor a scrollWidth-nek már nagyobbnak kellene lennie, akkor is egyformának veszi a két értéket (kb. 5-10 pixelig érzékeli rosszul). Amikor beraktam a setTimeout(fn, 0); utasítást, utána tökéletesen működött.
Azt szeretném megtudni, hogy ez a ronda megoldás miképpen működik a háttérben, és hogy esetleg van-e ötlet a setTimeout használatának elkerülésére.
■ Egy függvényben azt ellenőrzöm, hogy az adott elem scrollWidth értéke nagyobb-e, mint ugyanennek az elemnek a clientWidth értéke és ennek függvényében hozzáadódik egy class a szülőelemhez, ami módosítja az elrendezést. Ez resize eseményre tökéletesen megvalósul.
Ha azonban a nézetváltáshoz közeli szélességnél frissítem az oldalt, mikor a scrollWidth-nek már nagyobbnak kellene lennie, akkor is egyformának veszi a két értéket (kb. 5-10 pixelig érzékeli rosszul). Amikor beraktam a setTimeout(fn, 0); utasítást, utána tökéletesen működött.
Azt szeretném megtudni, hogy ez a ronda megoldás miképpen működik a háttérben, és hogy esetleg van-e ötlet a setTimeout használatának elkerülésére.
Használsz jQueryt, Angulart,
Ha reszponzivitás miatt csinálod ezt, akkor szerintem használj media queryt.
jQuery-t használok, de a
Új "szál" indul
Az alábbi példában nézd meg az egyik, illetve másik verziót és látni fogod, hogy mire is jó ez.
Jah, nevezzük inkább
Köszönöm a magyarázatot! Az
Lehet, hogy nem véletlenül
Szóval a fenti példára vonatkoztatva nálam valami ilyesmi történik:
Még több ok is lehet...
A
setTimeout(fn, 0);
-nak más mellékhatása is van, nem csak a fenti példa. Pl. egy for ciklusban folyamatosan változtatod egy elem pozícióját, akkor a böngésző beoptimalizálja azt neked és csak a futás végén kerül az elem a megfelelő helyre. Néha előfordulhat, hogy a böngésző túloptimalizálja magát és ilyenkor jó, ha ki tudjuk ezt valahogy cselezni.Én ott találkoztam ennek a hasznosságával, amikor canvas-re rajzoltam: http://stack.hu/mandelbrot/ Ha a függvény végén meghívtam volna simán a
run();
metódust, akkor csak a végeredményt láttam volna, ellenben így (setTimeout(run);
) folyamatosan növekszik a piros csík.Kipróbáltam, tényleg a