IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Opoždění jQuery?

Aktivity
Avatar
Pavel Vosyka
Člen
Avatar
Pavel Vosyka:3.4.2013 19:40

Ahoj,
nevím jak ten problém pojmenovat, ale dost mě to teď trápí.. takže:

<div id="div1" onclick="zmena();">Klikni na mně!</div>
<div id="div2"></div>
<script>
function zmena(){
    var text ='Jak to že to tak trvá?';
    $('#div1').text(text);
    console.log(text);
    druha();
}
function druha(){
    var i=0;
    //alert('mneco');
    while(i<50000){
    i++;
        $('#div2').text(i);
        console.log(i);
    }
}
</script>

Kliknutím spustím fci zmena. Očekávám, že bude pěkně postupně vykonávat co tam je psáno. Takže zaprvé má vypsat text do div1 - to zatím neudělá a jede dál - zapíše text do konzole, spustí druhou fci. Ta je trošinku náročná - má do druhého divu vypisovat postupně až 1 až 5000 a také zapsat do konzole.

Výstup konzole je v pohodě, tak jak má být:

  • Jak to že to tak trvá?
  • 1
  • 2

...

  • 5000

Jenže na obrazovce skript čeká a čeká... pak vypíše jenom těch konečnejch 5000 a text najednou (?!).

Jenže, když do druhé fce napíšu ten zakomentovaný alert tak se ta první změna - to vypsaní textu projeví... a až pak nabíhá těch 1-5000 (sice né postupně). Je tu někdo kdo by mi vysvětlil proč to tak je? A jak to udělat aby se to vypisovalo postupně? Díky

Odpovědět
3.4.2013 19:40
"nikdy nepiš nic 2x" (updated 10 years after: "Není nic špatného na tom napsat něco 2x")
Avatar
Odpovídá na Pavel Vosyka
Drahomír Hanák:3.4.2013 20:05

Stavové bloky příkazů, jako jsou while nebo for, se vykonávají najednou. Musíš nastavit nějaký interval (aby např. po 1s změnil text na i+1) a to se dělá pomocí setInterval();

 
Nahoru Odpovědět
3.4.2013 20:05
Avatar
Pavel Vosyka
Člen
Avatar
Pavel Vosyka:3.4.2013 22:22

No mám funckci, která stahuje JSON z instagramu (20 fotek) a dokud v tom JSONu je more_avaliable = true, stahuje další díl fotek takže to dělám pomocí while. Jakmile ho stáhne tak ho naparsuje a jednotlivé odkazy na obrázky vkládá do pole "obrázky", takže zatímco ten blok příkazů běží a pole se naplňuje já potřebuji vykreslovat něco na základě toho pole: for(var item in obrázky{třeba vykresli obrázek} ... Takže bych to měl řešit tak, že intervalem třeba každou 1s to budu vykreslovat z toho pole, do kterého se pak budou sypat ty odkazy z funkce, kterou spustím nějakým onClickem, jo?

Nahoru Odpovědět
3.4.2013 22:22
"nikdy nepiš nic 2x" (updated 10 years after: "Není nic špatného na tom napsat něco 2x")
Avatar
Odpovídá na Pavel Vosyka
Michael Olšavský:6.4.2013 16:10

Přesně tak! :) Místo cyklu while nastav intervalu funkci, která právě stáhne jednu fotku a tu poté zobrazí. Klidně to může být interval menší než 1s (počet se zadává v milisekundách).

 
Nahoru Odpovědět
6.4.2013 16:10
Avatar
Pavel Vosyka
Člen
Avatar
Odpovídá na Drahomír Hanák
Pavel Vosyka:18.4.2013 23:41

Teď jsem se taky dost opozdil, každopádně díky, teď to valí jak chci.. Vůbec mě to s těma intervalama nenapadlo, a je to skvělé..

Nahoru Odpovědět
18.4.2013 23:41
"nikdy nepiš nic 2x" (updated 10 years after: "Není nic špatného na tom napsat něco 2x")
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.