• 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
47 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,840 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 (170,810 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,637 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ź 91 wizyt
pytanie zadane 28 października 2018 w JavaScript, jQuery, AJAX przez warzywko13 Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 127 wizyt
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

62,468 zapytań

108,621 odpowiedzi

226,795 komentarzy

36,303 pasjonatów

Przeglądających: 64
Pasjonatów: 0 Gości: 64

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.

...