• 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
41 wizyt
pytanie zadane 6 lutego w JavaScript, jQuery, AJAX przez prymex Obywatel (1,050 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 przez m4sk1n Pasjonat (15,800 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 przez Tomek Sochacki Mędrzec (157,870 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 1,474 wizyt
pytanie zadane 21 września 2017 w PHP, Symfony, Zend przez Jakub Hryciów Początkujący (370 p.)
0 głosów
1 odpowiedź 83 wizyt
pytanie zadane 28 października 2018 w JavaScript, jQuery, AJAX przez warzywko13 Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 123 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

60,253 zapytań

105,938 odpowiedzi

220,099 komentarzy

32,461 pasjonatów

Przeglądających: 305
Pasjonatów: 19 Gości: 286

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...