Задать вопрос
JaxAdam
@JaxAdam
Junior Full-Stack Developer

Math.random() в цикле each(). Как сделать чтобы в каждой итерации число было рандомным?

Столкнулся с проблемой: мне нужно повернуть блоки на этой странице, как указано на рисунке ниже (каждый рисунок повернут под рандомным углом).

5c41dd305fe75866211615.jpeg
Как решение, я применил код jQuery:

$(document).ready(function () {
        $('.program-link').each(function(){
            var degree = Math.random() * (5 + 5) - 5;
            $('.program-link img').css(
                {transform: 'rotate(' + degree + 'deg)'}
            )
        });
    });

В итоге выясняю, что Math.random() у меня на странице работает не совсем корректно. При перезагрузке страницы остается тот же самый угол, и все рисунки повернуты под одним углом.
  • Вопрос задан
  • 255 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Вы хоть и выполняете рандом для каждого program-link, но назначаете этот рандом не к текущему элементу, а к всем. Код $('.program-link img') берет все элементы img из program-link. т.е. каждую итерацию, вы создаете случайный поворот, и назначаете его ко всем картинкам. В итоге, после работы скрипта, все картинки имеют один угол поворота - последний сгенерированный.
Вот так лучше:
$(document).ready(function () {
        $('.program-link').each(function(){
            var degree = Math.random() * (5 + 5) - 5;
            $(this).find('img').css( // берем картинку только из текущего .program-link
                {transform: 'rotate(' + degree + 'deg)'}
            )
        });
    });
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
const selector = '.program-link img';
const variation = 10;
const key = 'transform';
const getVal = () => `rotate(${variation * (Math.random() * 2 - 1)}deg)`;

$(selector).css(key, getVal);

// или

document.querySelectorAll(selector).forEach(n => {
  n.style[key] = getVal();
  // или
  n.style.setProperty(key, getVal());
  // или
  n.style.cssText += key.concat(': ', getVal());
  // или
  n.setAttribute('style', key + ': ' + getVal());
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так вы в каждой итерации задаёте угол для всех картинок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы