Ответы пользователя по тегу JavaScript
  • Что лучше использовать для анимаций css или js? И почему?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    но которую можно реализовать и с помощью css, и с помощью javascript...
    ваше мнение хотел услышать

    Мне самому нравится делать все на CSS, но... Если анимация должна быть интерактивной и нужно ее останавливать в процессе, откатывать в изначальное положение и.т.д., или некоторые ее части зависят от данных (в широком смысле - это и движение по сложной траектории, и построение графиков и.т.д.) и их проще рассчитать скриптом, чем подбирать коэффициенты в CSS keyframes, то JS будет лучшим выбором. Если это последовательность мало связанных между собой изменений, то опять же скрипты почти всегда будет проще реализовать. Если речь идет о CSS-анимациях с фильтрами (особенно SVG-фильтрами), то можно влететь в очень сильные проблемы с производительностью на слабом железе. И никакие хаки с GPU тут не помогут - все равно будет тормозить. В такой ситуации может иметь смысл не просто писать на JS, но и подключить WebGL и все делать руками на шейдерах.

    В остальных случаях стоит смотреть по ситуации - разные :hover / :focus эффекты обычно легко реализуются на CSS, и, если это так, то зачем что-то придумывать? CSS в последнее время очень даже неплох. Но если, например, в проекте вся анимация делается на JS, то может иметь смысл продолжать делать так же, сохраняя единообразие в коде.
    Ответ написан
    Комментировать
  • Как поменять элементы в массиве?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Сделать можно тысячей способов, например так:
    let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
    
    [arr[2], arr[5]]  = [arr[5], arr[2]];
    [arr[7], arr[11]] = [arr[11], arr[7]];
    [arr[4], arr[9]]  = [arr[9], arr[4]];
    
    console.log(arr); // [1, 2, 6, 4, 10, 3, 7, 12, 9, 5, 11, 8]
    Ответ написан
    1 комментарий
  • Как сделать glitch эффект в css или JS?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Сходите на codepen и посмотрите демки с первых 3-4 страниц по запросу "glitch". Там есть самые разные варианты того, как этот эффект можно сделать.
    Ответ написан
    Комментировать
  • Как сделать такой эффект?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    На событие mousemove повешен обработчик, который добавляет transform: translate нужным элементам. Как в этом примере, но только трансформация применяется к контейнеру с картинками-ссылками, а не к глазам.
    Ответ написан
    Комментировать
  • Генерация аватаров как на Гитхабе?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    К ответу выше добавлю Ucavatar - там аватарки не такие, как на гитхабе, но вдруг тоже пригодится (демо).
    Ответ написан
    1 комментарий
  • Как использовать маску на видео?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Проще всего поверх видео расположить (абсолютным позиционированием) SVG-картинку с прозрачной дыркой в форме этого пятна.
    Ответ написан
    2 комментария
  • Как сделать такую анимацию?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Скорость скролла используется как угловое ускорение для этих объектов. Знак зависит от направления скролла. При этом есть сила трения, которая постоянно уменьшает модуль скорости, тем самым тормозит и останавливает эти штуковины в конечном счете. Формулы из курса кинематики за 9 класс помогают сделать движения более натуральными, плавными и приятными глазу.
    Ответ написан
    Комментировать
  • Как делается такой эффект?

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

    Можно также все это делать с помощью SVG-маски, тоже из кучи квадратов, тоже менять им прозрачность при наведении мыши. По идее маска должна быть более производительным решением в этой ситуации.
    Ответ написан
    Комментировать
  • Бегущая линия по лендингу?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    бежит линия (ломаная), добегает до блока - он появляется и бежит дальше вниз по лендингу

    Если я правильно понял вопрос, то вам подойдет пример скролла из этой статьи, только линию нужно будет заменить на свою.
    Ответ написан
    Комментировать
  • Boilerplate для не SPA?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Без vue, react и прочих библиотек. Интересует как писать js компоненты типа табы, модалки и т.п. Как реализовать их взаимодействие. Хочется посмотреть на примеры и реализации.

    Если говорить о наборе компонентов интерфейса, особо не связанных между собой по данным (а в не-spa обычно это так и есть), то можете посмотреть мой велосипед. Там все просто, он сделан как раз для изучения. Убрав компоненты и утилиты получите почти готовый шаблон для сборки.

    для многостраничных сайтов

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

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    круглый бордюр

    Можно хоть звездочкой его сделать - habr.com/post/349988/.
    Ответ написан
    Комментировать
  • Не броская на первый взгляд сущность – как реализовано это шаманство?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Можно сделать на SVG:
    <svg viewBox="0 0 100 100">
      <defs>
        <filter id="noise">
          <feTurbulence id="js-turbulence" type="fractalNoise" baseFrequency="30" result="noisy"></feTurbulence>
          <feColorMatrix type="saturate" values="0"></feColorMatrix>
          <feBlend in="SourceGraphic" in2="noisy" mode="multiply"></feBlend>
        </filter>
        <clipPath id="the-object">
          <circle cx="50" cy="50" r="50" fill="currentColor"></circle>
        </clipPath>
      </defs>
      <circle cx="50" cy="50" r="50" fill="#5FDDD1" filter="url(#noise)" clip-path="url(#the-object)"></circle>
    </svg>

    Только вместо круга взять path, который вам нужен. Изменяя значение baseFrequency получите "анимированный" шум - codepen.
    Ответ написан
    1 комментарий
  • Как переписать эту лапшу?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    showButton () {
        switch (this.$route.name) {
            case 'new-article':
                return this.article.section &&
                       this.article.title &&
                       this.article.description;
            case 'update-article':
                return this.show &&
                       this.article.section &&
                       this.article.title &&
                       this.article.description;
        }
    }
    Ответ написан
    4 комментария
  • Как быть - учить GreenSock или чистую CSS Animation?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Кто нибудь из серьёзных верстальщиков делает анимацию самостоятельно, вот чтобы без плагинов писать весь код с нуля?

    Да, вполне. Тут нужно понять такую вещь: есть задача и есть инструмент под задачу. Если вам нужно посадить кактус в горшок - экскаватор будет не к месту. И не всегда универсальный набор шестигранников подойдет под треугольный болт.

    Вопрос : нужно ли вообще заморачиваться над серьёзным изучением анимации, джаваскрипта, или же забить и учить документацию гринсок?

    Что такое GSAP? Ну вот без красивых слов? Это набор функций, решающих набор задач. А если у вас появится задача, на которую этот инструмент не рассчитан? Или задача, которую вообще никто еще не решал до вас, или готовые решения не подходят? Вы ничего не сможете сделать. Так что если вы хотите делать интересные вещи, которые выходят за рамки среднестатистического сайта, то ответ очевиден.

    P.S.: И да, не зацикливайтесь на каком-то конкретном инструменте (например GSAP) только потому, что кто-то сказал, что это "стандарт". Всегда есть альтернатива. Например anime.js. То, что инструмент активно не развивается, не значит, что он вдруг перестал решать свою задачу. Старая добрая классическая zippo работала, работает и вас переживет.
    Ответ написан
    Комментировать
  • Как сделать эффекты как на сайте примере?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Что ж вас всех так тянет к этому канвасу? (риторический вопрос)

    1. Анимации буквы под ней фото. Как это делается? Подозреваю что canvas используется

    Если вы про большие "прозрачные" буквы, через которые видны фотографии, то никакой канвас там не нужен. Это делается на svg-масках - просто и производительно. Соответственно при перемещении мышки добавляется transform:translate для маски. Задача тривиальная, но оставлю пример для ознакомления. Переход между слайдами делается аналогично.

    2. Листание мышкой (зажимаешь появляются направляющие вверх-вниз, вправо-влево).

    На нажатие мышки вешаете обработчик, показывающий эти элементы (думаю не стоит говорить о том, как поменять им opacity). Далее точно так же - на событие "перетаскивания" добавляете transform:translate для всех этих линий и transform:scale для кружков. При переходе между слайдами добавляете еще больше трансформаций по вкусу.

    Остальные эффекты тоже интересуют. Понятно что css3, js, canvas

    Для рисования линий можно опять взять svg и..... Это вообще мощный прием, много куда его можно приткнуть. Появление надписей можно сделать на CSS-анимациях. Вариантов много, можно начать с вот этого примера (только делать все в обратную сторону) или поиграть с размерами псевдоэлементов, положенных поверх текстов. Еще там есть постраничный скролл, но это легко загуглить.
    Ответ написан
    5 комментариев
  • Как найти эту vanillavalue.com?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    disqus

    Этим все сказано. Запрос делает он. Несколько месяцев назад кто-то на сайте самого disqus жаловался на проблему с долгой загрузкой и как раз запросами на vanillavalue, но видимо так и не решили этот вопрос.

    Что эта за шалапань?

    Disqus за собой тянет гору всякой всячины, которая не нужна для его функционирования а просто следит за пользователем, собирает статистику, отсылает ее в кучу разных мест, тормозит, майнит крипту между делом... На счет последнего не уверен.

    Как его победить?

    Никак. Если есть такая возможность, то можно поиграться с CSP на ваших сайтах. Люди говорят, что с помощью этой штуки можно уменьшить количество запросов и немного ускорить загрузку disqus. Но от зомби серебряная пуля может и не спасти. Будьте готовы к тому, чтобы со временем перейти на другую систему комментирования.
    Ответ написан
    2 комментария
  • Как вывести HTML структуру в дерево?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Имеете в виду что-то такое?
    Ответ написан
    1 комментарий
  • User agent stylesheet и цвет орфографической ошибки?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    В отдаленном светлом будущем скорее всего у нас будут псевдоэлементы ::spelling-error и ::grammar-error, мы будем из CSS переопределять стандартное подчеркивание. На данный момент вот так просто из CSS ничего сделать не получится.

    куда копать

    В девелоперской версии Хрома есть chrome.automation API, в котором по идее с помощью метода getTree() можно получить некое дерево, похожее на DOM, но на самом деле им не являющееся, и опять же по идее в нем должны быть элементы типа AutomationNode для слов, которые содержат ошибки, и у них есть некоторые свойства вроде цвета и подчеркивания. Сам я этим никогда не пользовался, но интуиция подсказывает, что стоит копать в эту сторону.

    P.S.: Если вам нужно решение для сайта "здесь и сейчас", то думаю лучше будет совсем отключить проверку орфографии со стороны браузера и вместо нее вставить кастомную, в сети есть готовые решения.
    Ответ написан
    2 комментария
  • Как привязать контекст?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    чтобы клик срабатывал верно

    Чтобы клик срабатывал, никакие привязки контекста вообще не нужны:
    div.onclick = (e) => {
        e.target.classList.toggle("ss");
    }

    Если хочется попривязывать, то можно конечно, но для вашей задачи это усложнение на ровном месте:
    function listener(e) {
        this.classList.toggle("ss");
    }
    
    div.onclick = (e) => {
        listener.call(e.target, e);
    }
    Ответ написан
    1 комментарий
  • SVG и анимация - как собрать в кучу и сделать?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Смысл такой: из точки в верхнем левом углу выходит линия, которая переходит в какую либо другую точку на карте. Следующая линия также выходит из первоначальной точки, но уже переходит в другую точку на карте и т.д. Вообщем, как возможно сделать такое

    Рисуете эти линии в векторном графическом редакторе (каждую по отдельности); затем действуете по принципу, описанному в этой статье, чтобы эти линии прорисовывались от начала до конца.

    Если нужно сделать переменную толщину линий, как на картинке, то принцип будет тот же, но с дополнением: толщина линий делается довольно большой, а сверху к ним применяется SVG-маска (как с ними работать описано вот в этой статье), состоящая из кривых вытянутых треугольников (не знаю, как описать по-русски изогнутую линию переменной толщины, но по вашей картинке понятно, о чем речь).
    Ответ написан