• 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
61 wizyt
pytanie zadane 6 lutego w JavaScript, jQuery, AJAX przez prymex Obywatel (1,120 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 (16,580 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 (190,720 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 2,001 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ź 44 wizyt
pytanie zadane 22 sierpnia w JavaScript, jQuery, AJAX przez Dru Nowicjusz (180 p.)
0 głosów
1 odpowiedź 100 wizyt
pytanie zadane 28 października 2018 w JavaScript, jQuery, AJAX przez warzywko13 Początkujący (280 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

67,112 zapytań

114,059 odpowiedzi

241,726 komentarzy

47,027 pasjonatów

Przeglądających: 197
Pasjonatów: 15 Gości: 182

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.

...