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

Sleep w petli for

0 głosów
261 wizyt
pytanie zadane 6 lutego 2019 w JavaScript przez prymex Obywatel (1,250 p.)

Jak zrobić delay/sleep w petli w JS. Jak zrobię tak jak na dole to w wypisywaniu napisu w funkcji nie widzi zmiennej "i".

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Piszący się tekst!</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body{
            background-color: black;
        }
        span{
            color: #2ec62e;
            font-size: 23px;
        }
    </style>
</head>
<body>
    <span id="tekst"></span>
    <script>
        const tx = document.querySelector("#tekst");
    
        
        function writing() {
            
        const text = "To jest pisanie na maszynie";
            
         for(i=0; i < text.length; i++){
            
            
             var time = (Math.floor(Math.random() * 900 )+100);
             
             
             
            setTimeout(function (i) {
                tx.innerHTML = tx.innerHTML + text.charAt(i);
            }, time);
            
            
            //xd.sleep(2000);
             //setTimeout(writing, 2000);
        }
            
        }
        document.addEventListener("onload", writing());
    </script>
</body>
</html>

 

2 odpowiedzi

0 głosów
odpowiedź 6 lutego 2019 przez m4sk1n Pasjonat (16,750 p.)
Nie widzi, bo przysłoniłeś ją deklarując w funkcji z 37 wiersza zapewne… Poza tym, źle stosujesz asynchroniczność… Możesz np. utworzyć funkcję która będzie dodawać tę literę do tekstu i rekurencyjnie wywoływała siebie przez setTimeout.
0 głosów
odpowiedź 6 lutego 2019 przez Tomek Sochacki Ekspert (227,490 p.)

Tak zupełnie najprościej to zrób po prostu deklarację zmiennej iterowanej przez let, coś na wzór:

const text = 'Pisanie';
for (let i = 0; i < text.length; i += 1) {
  setTimeout(() => console.log(text[i]), 500 * i);
}

Masz tu w sumie gotowca w chyba 100% tego co oczekujesz, czyli wyświetlanie kolejno znaków co ok. 500ms.

Podobne pytania

0 głosów
2 odpowiedzi 6,834 wizyt
pytanie zadane 21 września 2017 w PHP przez The Pittdroid Początkujący (390 p.)
+1 głos
2 odpowiedzi 1,216 wizyt
pytanie zadane 27 lutego 2021 w JavaScript przez Darth Vader Początkujący (270 p.)
0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 22 sierpnia 2019 w JavaScript przez Dru Nowicjusz (180 p.)

93,599 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,083 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

Kursy INF.02 i INF.03
...