Replace the loop with setInterval ()

I want to constantly iterate over an array with a delay. In the example below, I used setInterval (). It works fine, but I'm curious if there is a better way to achieve this?


var message = "Lorem ipsum dolor sit amet";
var print = message.split(" ");


var iterateOverMsg = function(arr) {
    $('p').hide().append(arr[0]).fadeIn(3000).fadeOut(2000);
    var i = 1;
    setInterval(function() {
        $('p').hide().text(arr[i]).fadeIn(3000).fadeOut(2000);
        i++;
        if (i >= arr.length) {
            i = 0;
        }
    }, 5000);
}(print);

https://jsfiddle.net/Tzaru/94oym3yn/

+4
source share
1 answer

. -, modulo "" , . -, . , setTimeout(), , . :

var print = "Lorem ipsum dolor sit amet".split(" ");

function iterateOverMsg(arr, i) {
  $('p').hide().text(arr[i % arr.length]).fadeIn(3000).fadeOut(2000);
  setTimeout(iterateOverMsg.bind(this, arr, ++i), 5000);
}
iterateOverMsg(print, 0);
.dynamicText {
  font-size: 3em;
  text-align: center;
  color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="dynamicText"></p>
Hide result
+2

Source: https://habr.com/ru/post/1679031/


All Articles