Установить задержку между циклом For

#javascript #jquery

#javascript #jquery

Вопрос:

я создал эту функцию с помощью jquery, и я хочу установить задержку между каждым циклом, я пытался setInterval внутри цикла for, но это не работает.

   $(document).ready(function() {
    $(window).scroll( function(){
      for(let i =1;i <=6 ;i  ){
      $('#steps_icon-' i).each( function(){
              var bottom_of_object = $(this).position().top   $(this).outerHeight();
              var bottom_of_window = $(window).scrollTop()   $(window).height();
              if( bottom_of_window > bottom_of_object ){
                $(this).animate({'opacity':'1'
                ,'transform':'translateY(0px)',
                },2000);
            }
        });
      }
    });
});
  

то, что эта функция делает при прокрутке, приведет к появлению значка, но я хочу установить задержку между появлением каждого значка.

Ответ №1:

Вы можете использовать setTimeout, чтобы заставить его ждать. Но он асинхронный, поэтому вам следует использовать ключевые слова async-await.

 // Function to make program wait
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// Your code
$(document).ready(function() {
  $(window).scroll( async function(){ // Added async keyword here
    for(let i =1;i <=6 ;i  ){
    await sleep(200) // Added this line
    $('#steps_icon-' i).each( function(){
            var bottom_of_object = $(this).position().top   $(this).outerHeight();
            var bottom_of_window = $(window).scrollTop()   $(window).height();
            if( bottom_of_window > bottom_of_object ){
              $(this).animate({'opacity':'1'
              ,'transform':'translateY(0px)',
              },2000);
          }
      });
    }
  });
});
```
  

Комментарии:

1. вау, это отлично работает, но знаете ли вы, почему transform translate Y не работает в моей функции?

2. Я не мог сразу увидеть причину. Если вы можете поделиться jsfiddle , я могу поиграть и, возможно, найти ошибку.

3. я постараюсь заставить это работать, потому что это на сервере, он не будет работать на jsfiddle:(

4. я заставил это работать с этой строкой: $(‘#steps_icon-‘ i).css({‘transform’: ‘translateY (0px)’}) и внутри css следующим образом: [id ^=»steps_icon»]{ переход: преобразование 1s; преобразование: translateY(-10px); }