Вы можете использовать вложенный setTimout (также называемый цепочечным тайм-аутом) , чтобы выполнить sh, иначе результаты будут отображаться сразу в самом конце ( создается впечатление, что сработал только последний).
Метод pop()
возвращает / удаляет последний элемент массива, поэтому мы хотим сначала повернуть массив так, чтобы символы были вытеснены в их первоначальном порядке. По твоему вопросу спец. Использование pop()
дает нам быстрый способ запуска массива только один раз.
Я предпочитаю использовать вложенный setTimeout()
вместо setInterval()
, потому что setTimeout будет вызывать себя снова, как только он завершится, тогда как setInterval перезапускает себя по таймеру. Поэтому, если есть какая-либо задержка завершения функции, следующий setInterval все равно будет запускаться как запланировано , что означает, что несколько экземпляров функции могут складываться.
let arr = [];
$("button").click(function() {
$('.menu li').each(function(){
arr.push( $(this).text() );
});
arr = arr.reverse();
showChars(arr);
});
function showChars(arr){
if (arr.length === 0) return false;
let chr = arr.pop();
setTimeout(function(){
$('#show').val(chr);
showChars(arr);
},1000);
}
input {
width: 40px;
height: 40px;
text-align:center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<input type=text id="show" />
<button>show li in order every 2 seconds</button>
<ul class="menu">
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
<li>E</li>
</ul>
Chained-Timeout обеспечивает гарантированное время свободного времени для браузера; Интервал пытается обеспечить выполнение выполняемой функции как можно ближе к запланированному времени за счет доступности пользовательского интерфейса браузера.
setTimeout или setInterval?