Я пытаюсь написать повторно используемую функцию JS, которая управляет CSS-анимацией на нескольких фигурах. Я сделаю все возможное, чтобы объяснить, чего я пытаюсь достичь.
Цель состоит в том, чтобы контролировать несколько вещей:
param1
: количество генерируемых элементов (форм) li
param2
и param3
: диапазон чисел для произвольной продолжительности анимации для каждой сгенерированной фигуры
param4
и param5
: диапазон чисел для случайного левого поля для каждой сгенерированной фигуры
Я хочу использовать эту функцию на разных страницах веб-сайта. Например, я хочу, чтобы фигуры были частью всего фона на главной странице, но на другой странице создайте столб анимированных фигур рядом с некоторым текстовым содержимым.
HTML
<ul id="bg_list">
</ul>
CSS
:root {
--animation-duration: 2s;
--margin-left: 5px;
}
#bg_list {
position: absolute;
top: 0;
left: 0;
overflow: none;
width: 80%;
height: 92%;
}
#bg_list li {
position: absolute;
display: inline-block;
list-style: none;
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-bottom: 7px solid rgba(27, 23, 49, 0.5);
bottom: -10px;
overflow: none;
animation: animate var(--animation-duration) linear infinite;
margin-left: var(--margin-left);
z-index: -1;
}
@keyframes animate {
0%{
transform: translateY(0) rotate(0deg);
opacity: 0.2;
border-radius: 0;
}
50% {
opacity: 0.5;
}
100%{
transform: translateY(-1000px) rotate(720deg);
opacity: 1;
border-radius: 50%;
}
}
JS
function bgTriangles(x, max_d, min_d, max_m, min_m) {
var ul = document.getElementById("bg_list");
var duration = Math.floor(Math.random() * (max_d - min_d + 1) + min_d);
var margin = Math.floor(Math.random() * (max_m - min_m + 1) + min_m);
for(let i = 0; i < x; i++) {
var li = document.createElement("li");
ul.appendChild(li);
li.style.setProperty('--animation-duration', duration + 's');
li.style.setProperty('--margin-left', margin + 'px');
}
}
bgTriangles(5, 20, 10, 500, 5);
Приведенный выше код в основном работает, что вы можете увидеть, обновляя страницу, однако я не получаю ожидаемое количество фигур, и кажется, что они накладываются друг на друга, вместо того, чтобы получать случайную анимацию для каждой.
Вот демонстрация этого: ручка