• Как стилизовать и позиционировать картинки?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    <div class="grid">
      <img src="">
      <img src="">
      <img src="">
      <img src="">
    </div>


    .grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-template-rows: repeat(2, 1fr);
      gap: 1rem;
    }
    
    .grid img:nth-child(1),
    .grid img:nth-child(2) {
      grid-row: span 2;
    }
    Ответ написан
    Комментировать
  • Сделать видео или запросить секвенцию картинок?

    @its2easyy
    Видео при частой перемотке назад будет тормозить, если вы его не сделаете с большим количеством ключевых кадров, но если сделаете, то оно будет весить намного больше. Так что лучше нарезать на картинки, но вместо png с прозрачностью стараться делать jpg и сжимать по максимуму, до начала появления артефактов. Это даст выигрыш в несколько раз по сравнению с png.
    Ну и порекламлю свою библиотеку, которую для удобства таких анимаций делал, её как раз в основном с gsap scrolltrigger используем. https://github.com/its2easy/animate-images
    Обычно 60-90 кадров на анимацию, с оптимизацией и постепенной предзагрузкой проблем со скоростью нет, если это не прям на первом экране страницы находится блок. Под мобилы можно отдельно нарендерить кадры меньшего размера или вообще заменить это на что-то более простое.

    P.S. Если уже используется gsap, то для обновления состояния лучше вместо своих событий прокрутки использовать scrolltrigger и его колбеки
    Ответ написан
    2 комментария
  • Есть ли польза от codewars?

    theobroma
    @theobroma
    javascript developer (ReactJS)
    2 года назад CodeWars помог мне выучить JavaScript. Сухая теория не заходила вообще, а вот с практикой совсем другое дело... Решал задачки 8-7 kyu. На уровнях выше начинаются уже не основы языка, а больше упор на алгоритмы, знание математики и т.д. На 7 уровне не должно возникать проблем точно.
    Пишу код для решение на locahost в своем редакторе или IDE. Дебажу в консоли браузера. Когда вижу, что результат похож на правду, копирую код с редактора в окно для решения CodeWars. Проганяю предложенные тесты. Если все ОК, то сабмит, а если нет, то смотрю результаты тестов и допиливаю решение.
    Результаты не открываю пока сам не решу. В топовых и хитрых решения других всегда разбираюсь.
    Не стоит сильно зацикливаться на определенной задачи, которая не получается... Возможно не хватает знаний языка программирования. Бывает, что не могу понять условие задачи как таковое... Можно немного заморочиться, но если не идет, то смело откладываю на потом. Неудачи снижают боевой дух, а это ничем не помогает.
    Ответ написан
    2 комментария
  • Зачем нужен .env файл?

    @sergiodev
    В .env-файлах обычно прописывают переменные окружения, и для разных окружений типа dev, production, staging, могут быть созданы разные файлы. Также каждый из разработчиков может на локальной системе менять переменные под себя на своё усмотрение.

    В общем, env-файлы служат для изоляции приложения от среды, в которой оно запускается. Некая абстракция конфигурации.

    Например, обычно там хранятся всякие API-ключи и прочие пароли, которые разработчики не хотят впиливать в код (в целях конфиденциальности, например, если проект open-source и весь код залит на GitHub).
    Ответ написан
    1 комментарий
  • Как рандомно перемешать массив?

    Alexandroppolus
    @Alexandroppolus
    кодир
    function shuffle(arr) {
        for (let i = arr.length - 1; i > 0; --i) {
            const pos = Math.floor(Math.random() * (i + 1));
            const t = arr[pos];
            arr[pos] = arr[i];
            arr[i] = t;
        }
        return arr;
    }
    
    const newArr = shuffle(imagesData.slice()); // новый перемешанный, imagesData не поменялось
    const newArr2 = shuffle(imagesData); // перемешали imagesData, присвоили в newArr2
    Ответ написан
    4 комментария
  • Как вывести дату в указанном формате с библиотекой moment js?

    YavaDev
    @YavaDev
    Ну для начала перед тем как использовать какой либо инструмент, советую почитать его документацию. Ведь именно в документации и описано как работает данный интрумент.

    А теперь как сделать.
    В moment.js есть такие методы как .add() и .subtract(), которые позволяют добавлять и отнимать время.
    А еще есть методы .isBefore(), .isAfter(), .isBetween(), которые сравнивают даты.

    Зная эти методы, можно приступить к реализации
    const currentDate = moment(); // текущая дата
    // далее к дате комментария добавляем 6 месяцев и сравниваем с текущей датой
    const isAfterSixMonth = moment(date).add(6, 'months').isAfter(currentDate);
    if(isAfterSixMonth) { // если дата комеентария + 6 месяцев > текущая дата
      // выводим нужный формат
    }

    Это первый пункт, остальные делаются по аналогии.
    Ответ написан
    Комментировать
  • Подключение библиотеки для vue 3?

    0xD34F
    @0xD34F Куратор тега Vue.js
    app.use(Maska, store, axios, Vue3TouchEvents)

    Это как? Бегом документацию читать.
    Ответ написан
    1 комментарий
  • Подключение библиотеки для vue 3?

    mmmaaak
    @mmmaaak
    А ты уверен, что в use можно передавать сразу несколько плагинов? Я на вью не пишу, но зашёл в документацию, посмотрел API Reference метода use, и там вижу только вариант вызова для одного плагина и опционального объекта конфигурации для него
    Ответ написан
    1 комментарий
  • Как сделать процентную вероятность выведения той или иной картинки из 2 массивов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function weightedRandom(arr, key = () => 1) {
      const val = key instanceof Function ? key : n => n[key];
      const max = arr.reduce((acc, n) => acc + val(n), 0);
    
      return () => {
        let rand = Math.random() * max;
        return arr.find(n => (rand -= val(n)) < 0);
      };
    }
    
    
    const getRandomPhotosArray = weightedRandom([
      [ 9,  truePhotos ],
      [ 1, funnyPhotos ],
    ], 0);
    
    function getPhoto() {
      const photos = getRandomPhotosArray()[1];
      return photos[Math.random() * photos.length | 0];
    }
    Ответ написан
    Комментировать