У меня есть некоторый код JavaScript, и он работает (вроде).Я бы хотел как-то сжать его, возможно, одновременно захватить оба селектора CSS и перебрать их с циклом forEach()
.
Прямо сейчас, значение top
для обеих звезд даетто же значение, например style="top: 60%"
.Я хотел бы, чтобы они получили различные случайные значения для top
, left
, right
и transform
.
Я понимаю, что querySelectorAll
вернетNodeList, и может быть преобразован в массив, но я не могу понять, как это сделать, и поэтому он может получить .shooting-star-right
различные значения, используя секцию Math.random
.
Я пробовал это:
var stars = document.querySelectorAll('.shooting-star, .shooting-star-right');
for (let el of stars) {
shootingStar();
}
Я также пробовал это:
var stars = document.querySelectorAll('.shooting-star, .shooting-star-right');
stars.forEach(function() {
shootingStar();
});
Вот мой рабочий (хотя и довольно грязный) код => любая помощь очень ценится:)
init: () => {
let star = document.querySelector('.shooting-star');
let starRight = document.querySelector('.shooting-star-right');
const shootingStar = () => {
setInterval(() => {
let topPos = Math.floor(Math.random() * 80) + 1,
topPosRight = Math.floor(Math.random() * 80) + 1,
leftPos = Math.floor(Math.random() * 20) + 1,
rightPos = Math.floor(Math.random() * 20 + 1),
trans = Math.floor(Math.random() * 180) + 1,
transRight = Math.floor(Math.random() * 220) + 1;
topPos = topPos + '%',
topPosRight = topPosRight + '%',
leftPos = leftPos + '%',
rightPos = rightPos + '%',
trans = trans + 'deg',
transRight = transRight + 'deg';
star.style.top = topPos,
star.style.left = leftPos,
star.style.transform = 'rotate(' + '-' + trans + ')';
starRight.style.top = topPosRight,
starRight.style.right = rightPos,
starRight.style.transform = 'rotate(' + transRight + ')';
}, 9000);
};
shootingStar();
}