Анимация высоты div одна за другой onavascript javascript

Мне удалось начать работу над анимацией, и теперь я хочу, чтобы остальные анимировались с небольшой задержкой после каждого div Высота анимации и ее вызывающие проблемы. Я пытался использовать getElementsByClassName и это не сработало.

Я опубликовал свой прогресс здесь, в codepen.

  • Пробовал с помощью getElementsByClassName
  • Попробовал с помощью .containerdiv,

<html>

<head>
  <script>
    window.onload = function() {
      let box = document.getElementById('box')
      box.style.height = "100vh";
    }
  </script>
</head>

<body>
  <div class="container" id="container">
    <div class="box" id="box">
      box1
    </div>
    <div class="box" id="box2">
      box2
    </div>
    <div class="box" id="box3">
      box3
    </div>
    <div class="box" id="box4">
      box1
    </div>
  </div>

</body>

</html>

Я хочу, чтобы каждый отдельный элемент оживлялся с задержками, установленными для каждого.

3 ответа

Вы можете использовать transitionend событие первого box, чтобы начать переход box2:

window.onload = function () {
  const box = document.getElementById('box');

  box.addEventListener("transitionend", () => {
    document.getElementById('box2').style.height = "100vh";
  }, {once: true});

  box.style.height = "100vh";
}

Если вы хотите запустить 2-ю анимацию до завершения 1-й, вы можете использовать setTimeout функция с желаемой задержкой:

window.onload = function () {
  const box = document.getElementById('box');

  setTimeout(() => {
    document.getElementById('box2').style.height = "100vh";
  }, 200);

  box.style.height = "100vh";
}

Попробуй это..

window.onload = function () {
  var box = document.getElementsByClassName("box");
  for(var i = 0; i < box.length; i++)
  {
     box[i].style.height = "100vh";
  }
} 

Там у вас есть это. Код для анимации каждой из ваших коробок одна за другой.

Обратите внимание, что мне пришлось сначала преобразовать ваш список узлов в массив, а затем перевернуть массив. Это сделано для того, чтобы можно было извлекать элементы из массива и использовать длину массива для завершения рекурсивной функции. animateBoxes(),

Я использовал setTimeout() функция для выполнения рекурсивной функции 1 секунда за раз. Вы можете изменить параметр времени в соответствии с вашими потребностями.

Основным преимуществом этого метода является то, что он может автоматически анимировать любое количество блоков.

window.onload = function () { 
    let boxes = [].slice.call(document.querySelectorAll(".box")).reverse();
    animateBoxes(boxes);

    function animateBoxes(boxes) {
        if(boxes.length) {
            setTimeout(function() {
                boxes.pop().style.height = "100vh";
                animateBoxes(boxes);
            }, 1000);
        }
    }
}
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

.container {
    width: 100%;
    height: 100vh;
    background: green;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
}

#box, #box2, #box3, #box4 {
    width: 100%;
    height: 0;
    position: relative;
    top: 0;
    transition: 1s;
}

#box {
    background: red;
}

#box2 {
    background: purple;
}

#box3 {
    background: orange;
}

#box4 {
    background: yellow;
}
<div class="container" id="container"> 
    <div class="box" id="box"> box1 </div> 
    <div class="box" id="box2"> box2 </div> 
    <div class="box" id="box3"> box3 </div> 
    <div class="box" id="box4"> box4 </div> 
</div>

Другие вопросы по тегам