Задать вопрос
  • Как сделать такой эффект при наведении на карточки?

    Mirami97
    @Mirami97
    студент
    https://github.com/codrops/DirectionAwareHoverEffect
    Здесь использует этот плагин
    Ответ написан
    Комментировать
  • Как изменять булево значение в localStorage?

    wapster92
    @wapster92 Куратор тега JavaScript
    el.addEventListener('click', () => {
        const value  =  !localStorage.getItem('isOpen')
        localStorage.setItem('isOpen', value)
    })
    Ответ написан
    Комментировать
  • Как сделать генератор кодов?

    Seasle
    @Seasle Куратор тега JavaScript
    Как-то так. UPD: провел тесты, и переделал логику «сборки» итогового значения.
    const createKeyGenerator = (groupSize, groupCount) => {
        const dictionary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
        const length = groupSize * groupCount;
    
        return () => {
            const values = new Uint32Array(length);
            crypto.getRandomValues(values);
    
            const chars = [...values].map(value => dictionary[value % dictionary.length]);
            const key = new Array(groupCount)
                .fill(null)
                .map((_, index) => {
                    const offset = index * groupSize;
    
                    return chars
                        .slice(offset, offset + groupSize)
                        .join('');
                })
                .join('-');
    
            return key;
        };
    };
    
    const createKey = createKeyGenerator(4, 3);
    
    console.log(createKey()); // FO4V-P2ZV-JYH4
    console.log(createKey()); // TTMR-EBVC-8TUW

    Также, по-хорошему если данные коды будут хранится в БД, неплохо бы на существование проверять.
    Предыдущая версия

    const createKeyGenerator = (groupSize, groupCount) => {
        const dictionary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
        const length = groupSize * groupCount;
        const group = new RegExp(`.{${groupSize}}`, 'g');
    
        return () => {
            const values = new Uint32Array(length);
            crypto.getRandomValues(values);
    
            const chars = [...values].map(value => dictionary[value % dictionary.length]);
            const key = '_'
                .repeat(length)
                .replace(/\w/g, (match, index) => chars[index])
                .match(group)
                .join('-');
    
            return key;
        };
    };



    Хочу заметить: не могу гарантировать 100%, что алгоритм будет устойчивым (без повторов). Проверял на Set коллекции, по итогу размер коллекции превысил (16^6 значений) и получил исключение. При этом не было ни одного повтора.
    Ответ написан
    2 комментария
  • Как можно сделать авто смену картинок в галерее?

    Playmore
    @Playmore
    Опытный разработчик
    Привет. Тебе нужно сделать отдельную функцию, которая отображает нужный слайд по параметру, например так:
    function showSlide(id) {
        fullPhoto.src = arr[id].src;
        descPhoto.textContent = arr[id].desc;
    }

    В коде слушателя
    thumbnail.addEventListener('click', function () {
        return showSlide(this.dataset.id)
    }

    И добавить интервальный таймер, где будет вызываться эта же функция. Если id больше длины массива, то id = 0. И не забыть текущее id хранить в переменной.

    Но если честно: Вам стоит взять готовый плагин галереи. Например: https://kenwheeler.github.io/slick/. Там уже все есть, даже адаптивность
    Ответ написан
    Комментировать
  • Как можно сделать авто смену картинок в галерее?

    Snova_s_vami
    @Snova_s_vami
    JavaScript ES5-8, TypeScript, Angular
    window.addEventListener('load', () => {
      let current = 0;
      let max = thumbnails.length - 1;
      setInterval(() => {
         fullPhoto.src = thumbnails[current].getAttribute('src');
         current = current < max ? current + 1 : 0;
    	}, 1000);
    })
    Ответ написан
    Комментировать
  • Как сделать подобную анимацию линии под текстом?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.


    От легких обрывов анимации при быстром наведении/отведении никуда не деться, ибо мы меняем значение свойства transform-origin, чтобы сделать ваш эффект. Его (transform-origin) в данном случае анимировать не стоит вовсе, иначе вообще вся анимация ломается.
    Ответ написан
    1 комментарий
  • Как можно использовать псевдоклассы инлайн в react?

    kleinmaximus
    @kleinmaximus
    Senior Full-stack Javascript Developer
    Зависит от того, что Вы используете для инлайн-стилизации.
    Если просто обычный объект, то никак.
    Если что-то типа Radium, то вот пример.
    Ответ написан
    Комментировать
  • Как можно использовать псевдоклассы инлайн в react?

    badJaguar
    @badJaguar
    Full-Stack Software Engineer
    const style = {
      color: '#000000',
      ':hover': {
        color: '#ffffff'
      }
    };
    Ответ написан
    Комментировать
  • Как реализовать различные стратегии выбора элементов, в зависимости от блоков, в которых они находятся?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Элементам .item добавить data-атрибуты, указывающие, выбор какого типа осуществляется с помощью кнопок внутри (only - выбран может быть только один вариант вообще, one - выбран может быть только один вариант внутри данного .item, multiple - можно выбирать произвольное количество вариантов внутри данного .item):

    <div class="item" data-type="only">
      <h2>Выбрать все категории</h2>
      ...
    </div>
    <div class="item" data-type="one">
      <h2>Выбрать пол</h2>
      ...
    </div>
    <div class="item" data-type="multiple">
      <h2>Выбрать тип одежды</h2>
      ...
    </div>

    const containerSelector = '.filter';
    const itemSelector = `${containerSelector} .item`;
    const baseBtnSelector = 'button';
    const btnSelector = `${itemSelector} ${baseBtnSelector}`;
    const btnOnlySelector = `${itemSelector}[data-type="only"] ${baseBtnSelector}`;
    const activeClass = 'active';
    
    document.addEventListener('click', ({ target: t }) => {
      const button = t.closest(btnSelector);
      if (button) {
        const toggle = n => n.classList.toggle(activeClass, n === button);
        const item = button.closest(itemSelector);
        const { type } = item.dataset;
    
        item
          .closest(containerSelector)
          .querySelectorAll(type === 'only' ? btnSelector : btnOnlySelector)
          .forEach(toggle);
    
        if (type === 'multiple') {
          button.classList.toggle(activeClass);
        } else if (type === 'one') {
          item.querySelectorAll(btnSelector).forEach(toggle);
        }
      }
    });
    Ответ написан
    1 комментарий
  • Можно ли в slick slider сделать такой слайдер?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Это есть прямо в документации Slider Syncing называется

    Ответ написан
    Комментировать
  • Как такое сверстать?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Все в одну картинку - не универсально, тем более, что сверстать не сложно.
    Первый пример - один круг с градиентом, второй - белый, сверху.
    Второй пример - тот же круг с градиентом, и перекрыть ему половину. На мой взгляд варианты с большим количеством бордер-радиусов могут ломать мозг, но тут на вкус и цвет...
    Ответ написан
    Комментировать