• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javascript, uśpienie pętli.

Object Storage Arubacloud
0 głosów
726 wizyt
pytanie zadane 31 lipca 2019 w JavaScript przez Fillo Początkujący (250 p.)

Witam, chciałbym, aby każda linijka w pętli wykonywała się po pewnym czasie, gdyby w JS istniała funkcja sleep, to użyłbym jej. Niestety takiej nie ma, więc muszę posłużyć się inną metodą, jakieś sugestię?

		        <script>
            var kropka1 = document.createTextNode(".");
            var kropka2 = document.createTextNode(".");
            var kropka3 = document.createTextNode(".");
            function dodaj()
            {
                for (let i=0; i<3; i++)
                {
            
                document.getElementById("center").appendChild(kropka1);
                //1s break
                document.getElementById("center").appendChild(kropka2);
                //1s break
                document.getElementById("center").appendChild(kropka3);
                //1s break
                document.getElementById("center").removeChild(kropka1);
                //1s break
                document.getElementById("center").removeChild(kropka2);
                //1s break
                document.getElementById("center").removeChild(kropka3);
                //1s break
        
                }
            }
            window.onload = dodaj;
        </script>

I jeszcze jedno pytanko, mógłby ktoś mi wytłumaczyć, czemu pętla nie reaguje, gdy w argumencie appendChild użyje (kropka+i) albo ("kropka"+i).

	document.getElementById("center").appendChild(kropka+i);

Z góry dziękuję :D

1 odpowiedź

0 głosów
odpowiedź 31 lipca 2019 przez spamator12 Nałogowiec (28,230 p.)
setTimeout, setInterval, bo nie odnosisz sie do i - pozatym jak cchesz wykonac petle, ktora inkrementuje element, gdzie nagle w srodku ma byc on pomniejszany?
komentarz 31 lipca 2019 przez Fillo Początkujący (250 p.)

Dzięki za odpowiedź, tyle, że ja chciałem uzyskać efekt wykonywania się każdej linijki kodu w funkcji po określonym czasie, a próba poniższego zastosowania setTimeout niestety nie działa

function dodaj()
				for (let i=0; i<3; i++)
                {
				{
		
				setTimeout(function(){ document.getElementById("center").appendChild(kropka1);},1000);
				setTimeout(function(){ document.getElementById("center").appendChild(kropka2);},2000);
				setTimeout(function(){ document.getElementById("center").appendChild(kropka3);},3000);
				setTimeout(function(){ document.getElementById("center").removeChild(kropka1);},4000);
				setTimeout(function(){ document.getElementById("center").removeChild(kropka2);},5000);
				setTimeout(function(){ document.getElementById("center").removeChild(kropka3);},6000);
{
{

Jeżeli polecenia są po za pętla również.

komentarz 31 lipca 2019 przez spamator12 Nałogowiec (28,230 p.)

A to ciekawe:) specjalnie dla Ciebie w prostej i przystepnej formie.  Zastanow sie co jeszcze mozna tam zmienic aby to lepiej wygladalo (a duzo mozna).

 

<div id=container" style="width:100px;height:100px;size:30px;color:black;font-weight:bold;background:white;">
<div id="center"></div>
</div>
         <script>
            var kropka1 = document.createTextNode(".");
            var kropka2 = document.createTextNode(".");
            var kropka3 = document.createTextNode(".");
            function dodaj()
            {
                for (let i=0; i<3; i++)
                {
setTimeout(function()
{
                document.getElementById("center").appendChild(kropka1);
                //1s break
}, 1000);
setTimeout(function()
{
                document.getElementById("center").appendChild(kropka2);
                //1s break
}, 2000);
setTimeout(function()
{
                document.getElementById("center").appendChild(kropka3);
                //1s break
}, 3000);
setTimeout(function()
{
                document.getElementById("center").removeChild(kropka1);
                //1s break
}, 4000);
setTimeout(function()
{
                document.getElementById("center").removeChild(kropka2);
                //1s break
}, 5000);
setTimeout(function()
{
                document.getElementById("center").removeChild(kropka3);
                //1s break
}, 6000);
                }
            }
            window.onload = dodaj;
        </script>

 

komentarz 31 lipca 2019 przez Fillo Początkujący (250 p.)

Dzięki za poprawę stylistyczną tekstu, rzeczywiście nie przykładam jeszcze do tego wagi, a pomysłu na poprawną realizację tego co chce osiągnąć niestety nie mam, myślałem jeszcze, żeby zastosować funkcję setTimeout na funkcję appendChild(jak poniżej), ale również nie działa.

setTimeout(document.getElementById("center").appendChild(kropka1),1000);

 

1
komentarz 31 lipca 2019 przez spamator12 Nałogowiec (28,230 p.)

Na razie nie martw sie zbytnio o stylistyke. Baw sie na mniejszych elementach, laczac je w calosc tylko wtedy gdy dokladnie nauczysz sie jak dzialaja.

 

Najpierw stworz sobie loopa zobacz co i jak. POtem dodaj i odejmij elementy w DOM (drzewku html - czyli na stronie), itd.

 

Mam nadzieje ze znasz angielski wtedy pomoze ci w3school (przyklady!) a potem mozilla.

https://www.w3schools.com/js/js_loop_for.asp - przyklady!

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration - dobre spojne wyjasnienie dla troche bardziej zaawansowanych.

 

Po polsku tez na pewno cos znajdziesz, szukaj, oglodaj na youtube jak nauczysz sie podstaw to pokombinuj jak nie bedziesz mogl rozwiazac problemu to sie zglos.

komentarz 31 lipca 2019 przez Fillo Początkujący (250 p.)
Nie wiem czy za dużo nie wymagam, uczę się programowania od nie dawna, więc moje funkcję zachowawcze w tym środowisku, szczególnie gdy jakiś kod mi nie wychodzi, nie najlepiej działają, tym bardziej biorąc pod uwagę to, że w przeciwieństwie do innych środowisk, tutaj prosząc o pomoc na forum, trzeba być "zaangażowanym" w swój problem. Jednak wydaję mi się, mimo  że znam podstawy pętli  siedzę nad tym kodem jakiś czas,  nadal nie mam pomysłu :D

Wywołanie setTimeout'a dużo mi nie daję, bo cała funkcja wywołuję się w przeciągu chwili, co sprawia, że kropki, które chciałbym aby pojawiały i znikały po kolei, w określonych odstępach czasowych, pojawiają i znikają błyskawicznie, co nie daje zamierzonego efektu. Również w js, nie ma funkcji sleep(), jak np w innych językach programowania, a zastosować SetTimeout'a na jedno polecenie się chyba nie da, lub nie umiem(wrzucałem moją próbę wcześniej)

Btw. chciałem, żeby pętla for wykonała się 3 razy, stąd index=3, piszę to dla pewności,  możliwe, że przez pryzmat, tego , że jestem maksymalnie początkujący, pomyślałeś, że chciałem w jakiś magiczny sposób sobie pomóc z zamierzanym efektem :D
komentarz 31 lipca 2019 przez ScriptyChris Mędrzec (190,190 p.)

@Fillo, jeśli pytasz o możliwość "uśpienia" kodu JavaScript, to domyślam się że nie wiesz na czym polega asynchroniczność - a bez jej zrozumienia trudno będzie Ci poradzić sobie dalej (obsługa eventów, komunikacja przez HTTP, praca z Workerami itd.). Polecam więc obejrzeć tą prezentację i przeczytać tę książkę (przynajmniej pierwszy rozdział).

komentarz 3 sierpnia 2019 przez spamator12 Nałogowiec (28,230 p.)

@Fillo, zastosowales ten kod co podalem? Nadal masz z tym problem?

Podobne pytania

0 głosów
0 odpowiedzi 1,541 wizyt
0 głosów
1 odpowiedź 163 wizyt
pytanie zadane 20 czerwca 2022 w JavaScript przez AnimaVillis Stary wyjadacz (11,510 p.)
+2 głosów
1 odpowiedź 1,236 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...