Ответы пользователя по тегу JavaScript
  • Как рандомно и одновременно равномерно расположить элементы по секции?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Имеете в виду что-то такое?

    Ответ написан
    2 комментария
  • Как сделать анимацию куба, как на сайте axoft.ru?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Что это за фреймворк?

    Да не нужны там фреймворки. Нужна копипаста стилей для кучи почти одинаковых объектов (ее, наверное, можно сократить каким-нибудь хитрым миксином, но суть не поменяется):

    Ответ написан
    1 комментарий
  • Как устранить ошибку barba.js и locomotive-scroll?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Это был настолько распространенный вопрос, что в документации barba.js появился отдельный блок про интегрирование locomotive-scroll. Имеет смысл почитать, и сделать все так, как там написано.
    Ответ написан
  • GSAP. Как изменять zIndex на определённых точках Path?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Можно продублировать SVG и "верхнюю" копию частично скрыть маской. Это не самое универсальное решение, но в контексте задачи может быть самым простым и надежным, т.к. не будет никакой привязки к контенту, только к структуре кривой:
    Ответ написан
  • Почему одни экземпляры создаём через new, а другие литерально?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    console.log(new Number(1) + new Number(2)); // выводится 3 и typeof полученного значения number
    То есть всё в порядке, это то же самое, как если бы мы сделали:
    console.log(1 + 2);

    Число - это Primitive. У примитивов есть эквивалентные объектные аналоги (кроме null и undefined). Поэтому да, это "то же самое" в каком-то смысле (у примитива нет методов, в отличии от эквивалентного объекта, они не могут быть изменены, и.т.д., но в таких простых расчетах мы не обращаем на это внимания). А штуки вроде упомянутых промисов, дат и что там еще бывает - это будут уже не примитивные типы данных, там такой двойственности уже нет.

    В остальном - там есть немного синтаксического сахара, связанного с функциями и объектами. Например Object может быть создан разными способами, хотя фактически они приводят к одному результату, а не как у примитивов и их объектных оберток-аналогов.
    Ответ написан
    Комментировать
  • Как определиться с зависимостями лендинга?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Смешались в кучу кони, люди, GSAP, React, Three.js... Стоит немного систематизировать инструменты хотя бы по задачам, которые они решают. Не привязываясь к конкретным фреймворкам из большой троицы, у нас есть несколько классов инструментов в теме креативных сайтов:

    • Про готовые CSS-анимации - animate.css, Wow.js, и.т.д. Там много динозавров из времен jQuery. Такие штуки часто бывают не в тему дизайна, но стоит посмотреть и забыть. Хотя для сайтов в духе дизайнерской дичи, вроде той, что успешно делают в студии Артемия Лебедева - может быть и ок.
    • Про интерполяцию всего и вся. Тут обычно выбирают между GSAP и Anime.js. Первый вариант - более замороченный, есть полезные плагины, второй - попроще, но тоже хорош, в некоторых кругах даже более популярен. Для совсем простых задач - можно свой инструмент написать.
    • Про скролл, в основном в контексте CSS-анимаций. Тут Locomotive Scroll рулит.
    • Про переходы между экранами. Грубо говоря прокаченный роутер. Самый популярный - Barba.js. Раньше еще был Highway.js, но в последне время что-то про него мало говорят.
    • Про экспорт готовых анимаций из софта для анимаций. Тут нужно отталкиваться от софта. Обычно вопрос возникает в контексте AE и простых мультиков - тут Lottie, говорят, неплох. Но нужно дизайнера заранее консультировать по теме, чтобы лишнего не намалевал.
    • Про визуализацию данных. Тут полезно знать про d3.js, в основном ради готовых примеров.
    • Про трехмерный WebGL, чтобы не писать все руками. Самый популярный вариант - Three.js, в основном за счет экосистемы и горы готовых решений, но есть и альтернативы на любой кус и цвет. Для 2D -эффектов вообще ничего не нужно в большинстве случаев.
    • Плюс не стоит забывать про всякие вспомогательные штуки вроде WebFontLoader, Hammer.js, LeaderLine, и.т.д. К анимациям они не относятся, но в работе могут быть полезны, чтобы не писать все самому.


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

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

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    не могу найти в поиске

    SVG-маски, маски с помощью clip-path в CSS, маски на канвасе, маски в шейдерах, и.т.д. В общем гуглите все, что связано со словом "маска". Вариант с шейдерами самый производительный, с SVG - самый простой.

    Пример с SVG:


    Пример с шейдерами (не совсем такой, но для передачи идеи пойдет):
    Ответ написан
    Комментировать
  • Что за потеря контекста webgl и с чем её едят?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Пытаюсь создать рисовалку на webgl2

    Стоит посмотреть на поддержку WebGL2 в Safari, осознать, что экспериментальная фича даже при "зеленой" поддержке не отличается стабильностью, и подумать еще раз пока не поздно. Но это так, к слову. Раз уж говорим про качество и надежность.

    Что произойдёт с данными при потере контекста? ...потом восстанавливать его? ...старый контекст автоматически удалится или так и будет висеть в небытии?

    По теме есть хорошая заметка из первых рук. Там есть ответы на ваши вопросы с подробностями и примерами кода.

    Может вообще забить на эту потерю контекста? Как часто она происходит? Раз на миллион?

    Происходит действительно редко. Я за все время экспериментов с WebGL не столкнулся ни разу. То есть такое впечатление, что скорее браузер намертво повесится, чем сбросит контекст. Нужна ли супер-надежность с обработкой этого редкого сценария в вашем конкретном случае - решать вам. Но в целом мало кто об этом заботится.
    Ответ написан
    Комментировать
  • Как реализовать вот такой эффект?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    SVG-маски - наше все. Хотя в этом случае вариант с clip-path тоже очень даже рабочий. Еще есть вариант маски на шейдерах, но это совсем особый случай, хотя может внезапно оказаться очень производительным.

    Ответ написан
    Комментировать
  • Как реализовать подобную анимацию?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    В соседнем ответе все верно написали. CSS-трансформации - это именно то, что нужно в такой ситуации. Технически вся красота возникает из-за параллакса - там несколько слоев движутся с разной скоростью. Так что здесь не обязательно именно слайдер использовать - это может быть любой инструмент для построения кастомного скролла (с инерцией). При желании можно свой написать, это не так сложно, нужен лишь школьный справочник по физике, но можно и готовый инструмент взять. Тот же Locomotive Scroll вполне сгодится.

    В этом примере как раз что-то похожее (только нужно открыть на CodePen - горизонтальный скролл не очень дружит с iframe-вставками):
    Ответ написан
    1 комментарий
  • Помощь в создании диаграммы на D3. Как сделать?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    она есть на сайте D3... нужен полный код этой, либо похожей диаграммы...


    Она и правда там есть. Равно как и кнопка "скачать исходники":
    6008378d043b8035188422.png
    Ответ написан
    Комментировать
  • 3D "window" в браузере?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    ...там работал обычный CSS, но был 3D объектом на который смотрит камера... Да, я видел всякие Three.js...

    Как раз в Three.js есть такая штука как CSS 3D Renderer. Можно расположить условные div елементы в пространстве и работать с ними "в 3D".
    Ответ написан
  • На каких технологиях создан сайт сериала тьма?

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


    Не глядя в код, можно предположить использование следующих технологий:
    1. Волны абстрактные и на фотографиях, шум на фоне - WebGL, шейдеры. Вода на первом экране - скорее всего моделируется как идеальная жидкость, волны на фотографиях - чисто геометрические.
    2. Обведение текста в овал, трилистник с пунктиром, стрелки на карте - SVG, рисование линии по такому принципу.
    3. Плавные переходы между экранами можно делать по-разному, даже забытый модными фронтендерами pjax будет к месту. Можно познакомиться с barba.js - это если не самый популярный, то один из популярных инструментов для работы с плавными переходами. Можно использовать роутеры из SPA-фреймворков, не принципиально. Самое сложное здесь - все синхронизировать.
    4. Карта с персонажами - это может быть обычная верстка, подложенная под канвас с шумом. Самый простой вариант.
    5. Есть небольшое покачивание элементов вслед за мышкой, логично предположить, что это банальная CSS-трансформация на mousemove.
    6. Рисование дуг из точек - это может быть либо SVG, как в п.2, только эта линия будет маской, либо можно это строить как графики.
    7. Ну и немного стандартных CSS-анимаций там тоже есть.


    Дополнительные библиотеки здесь - дело вкуса, можно и на ванильном JS все сделать, разве что роутер я бы взял готовый. Вся соль в визуальных эффектах, а для них готовых решений не будет, если работа будет строиться по принципу "сначала придумать, потом сделать".
    Ответ написан
    Комментировать
  • Как сделать 3D анимацию такого плана как на сайте?

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

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Поскольку мы видим неравномерные искажения картинки - варианты реализации этого на CSS и SVG отпадают. Единственный вариант - canvas и манипуляции с пикселями. С точки зрения производительности - лучше сразу смотреть в сторону WebGL и шейдеров. В этом контексте задача разделяется на четыре:

    • Отобразить картинку на плоскости в WebGL контексте, оставив по краям немного прозрачности (чтобы был простор для искажений).
    • Волны - это смещения пикселей. Характер может быть разным, но скорее всего будет что-то в духе "смещение пикселя = синус(положение пикселя + время)". Похожий пример есть вот в этой статье.
    • Покраснение - при задании цвета пикселя во фрагментном шейдере увеличиваем значение R в рамках RGBA (в зависимости от времени).
    • Дальше заменяем время на нужный нам параметр (скролл с верха страницы например, ну или что там вам нужно).


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

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Есть три варианта:
    const a = '"#512534"';   // <-- Другие кавычки
    const b = "\"#512534\""; // <-- Экранизация
    const c = `"#512534"`;   // <-- Шаблонные строки
    Ответ написан
    3 комментария
  • Почему данный пример не работает?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Вы забыли подключить jQuery UI. На CodePen библиотеку можно легко подключить введя ее название в поле "search CDNs..." в окошке для подключения скриптов - она есть на cdnjs, так что вы сразу увидите ее в выпадающем списке.
    Ответ написан
    5 комментариев
  • Как вставить 3д модель с помощью three.js?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    В сети есть множество примеров. Есть официальный пример из документации самой Three.js. Или вот, например, другой вариант, с дополнением в виде статьи.
    Ответ написан
    Комментировать
  • GreenSock или anime.js?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    очень сложный с анимационной части сайт

    Ну "очень сложный" - понятие растяжимое. Если нужен сложный морфинг или физика в 2d - однозначано берите GSAP, у него есть готовые плагины для этого (а значит не нужно думать об интегрировании чего-то со стороны). А так в большинстве повседневных задач вы разницы между этими инструментами не заметите, тут скорее на вкус и цвет: GSAP - это более "энтерпрайзно-замороченный" инструмент с кучей кнопок, а anime.js скорее ближе к unix-way - маленький и решающий одну задачу.
    Ответ написан
    4 комментария
  • Какие замечания к JS слайдеру?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    По функционалу:
    • Иногда подвисают кнопки "влево" и "вправо", не реагируют по несколько секунд.
    • При переходе с последнего слайда к первому мелькают они все. Было бы круто, чтобы был просто переход, как между остальными.
    • С клавиатуры нельзя попользоваться, свайпы тоже не поддерживаются.
    • В начале есть что-то вроде document.querySelectorAll в большом количестве. Это намекает на то, что два слайдера на одной странице работать не будут (все смешается в кучу).


    По коду:
    • Код ужасно отформатирован. Читать сложно (читай поддерживать сложно). Ознакомьтесь хотя бы с Airbnb JavaScript Style Guide и поймите, зачем делать код читаемым. Также там мешанина из ES6+ и каких-то древних хаков с that=this, самовызывающимися функциями и.т.д. Вы же уже используете современный язык - так используйте только его. Код будет в разы проще по структуре. Сейчас там черт ногу сломит. И очень очень очень очень очень очень длинные функции тоже мешают ориентироваться в происходящем.
    • Бессмысленные комментарии. Они просто дублируют код.
    • Сторонний код лучше загружать через NPM и подключать из node_modules, а не копироваать себе, и тем более не стоит руками смешивать разные инструменты в один файл. И да, они там вообще используются или просто лежат?
    • В репозитории отсутствуют конфиги и инструкция по сборке. Все это должно быть. Без них непонятно, как вообще это пересобрать.


    Рекомендации:
    • Почитайте про стиль кода, про то, как писать просто и понятно. Лучше этому сразу научиться.
    • Загуглите, как и зачем писать комментарии (и как из них генерировать документацию).
    • Поймите, зачем нужны все стандартные инструменты - сборщики, препроцессоры, линтеры, пакетные менеджеры, системы контроля версий и.т.д. Это понимание поднимет на новый уровень ваши поделки в плане их дальнейшего переиспользования. Да и вам поможет в работе.
    • Тестируйте. Хотя бы вручную.
    Ответ написан
    3 комментария