Ответы пользователя по тегу JavaScript
  • Как определить производительность клиента (компьютера)? Свести к удобству нагрузку сайта скриптами?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Общался на эту тему с некоторыми продвинутыми чуваками, они рассказывали как запиливали подобное. Если в кратце, то все решения представляют из себя жуткие костыли, когда в течении N милисекунд идет какой-то кастомный бенчмарк, на основе которого магическим образом определяется производительность и на основе этого делаются выводы. Но суть в том что полагаться на такую штуку плохая идея, ибо браузер, открывающий вкладку в фоне, такой бенчмарк завалит. И так далее тому подобное.
    Так что просто забудьте о канвас свистоперделках на телефонах. Либо детектите конкретные версии IOS (ниже 9 например, что не соответствует флагманам) или андроид (хотя тут не поможет) и им не показывайте анимацию или давайте ее облегченную версию. Но это все костыли 99 уровня и за такое в аду для вас будет отдельная печь.
    Ответ написан
    Комментировать
  • Как сделать такой скролл?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Куча свг, анимация которых привязана к текущему "прогрессу" (скроллу страницы). Такое например можно замутить с помощью GSAP Timeline, создаете таймлайн, запихиваете вагон всех возможных анимаций, грамотно расставленных на определенных этапах и потом меняете прогресс таймлайна относительно отношения позиции скролла к общей высоте скролла.

    Могу с уверенностью сказать что на создание этого сайта ушло много слез разработчиков и дизайнеров.
    Ответ написан
    Комментировать
  • Как сделать такой эффект слайдера?

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

    Я почти 2 недели назад сделал такую демку - codepen.io/suez/pen/AXQaEg, тут все намного плавнее и красивее, да еще и все реализовано с помощью css, js лишь 2 класса добавляет, но у меня правда отсутствует функционал слайдера, ибо концепт другой. Но можете изучить css чтобы понять как это дело работает.
    Ответ написан
    1 комментарий
  • От чего зависит плавность работы анимации на сайте?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Вам необходимость использовать Timeline в Chrome DevTools для профилирования производительности анимаций и не только.

    Хотите знать основы оптимизации рендеринга - вам сюда https://www.udacity.com/course/browser-rendering-o...

    Причин плохой оптимизации может быть вагон и маленькая тележка. У вас там могут огромные элементы анимироваться с помощью top/left вместо transform: translate, у вас при каждом скролле может идти repaint огромных картинок, забирая по 60-100мс на каждый шаг и так далее. Скорее всего причины крайне простые и связаны с использованием древних и убогих методик для анимаций, аля jQuery.animate (который до 3й версии юзает setTimeout вместо requestAnimationFrame под капотом).
    Ответ написан
    Комментировать
  • Какой выбрать фреймворк для сложных веб-анимаций (с примером)?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Варианта 2 почти всегда:
    1) Greensock (GSAP). Самая крутая либа для анимаций, умеет наверное все, кроме разве что канваса/webgl (для этого обычно уже юзают threejs или ручками что-то пишут).
    2) Bodymovin. На второй гифке например последовательная анимация, не требующая интеракций от юзера, но содержащая при этом множество деталей и микродвижений. Пилить такое руками - ОЧЕНЬ много часов (разница между похожим прототипом и прототипом на 90% схожим с гифком - колоссальная). В то время как с bodymovin вы просто экспортируете всю анимацию из after effects и запустите ее на клиенте. Есть конечно же свои плохие стороны, отсутствие гибкости и весьма немалое количество кода, экспортируемого из AE, но обычно в таких ситуациях других способов не бывает.
    Ответ написан
    Комментировать
  • Какие есть интересные блоги современных JavaScript ниндзя?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Блоги не надо мониторить, надо подписаться на пачку дайджестов, и там вы найдете ссылочки на почти все достойные статьи, включая менее известных (но не менее крутых) товарищей.
    Получать 5-10 писем с кучей ссылок в неделю намного проще и эффективнее, нежели чем чекать 10+ блогов, где апдейты бывают раз в 1-6 месяцев.
    Ответ написан
    3 комментария
  • Svg иконки в SPA?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    SVG не поддерживает динамическое изменение xlink:href аттрибута, по-этому для таких иконок надо писать отдельный мини-компонент, который будет просто динамически вставлять элемент с линком внутри в страницу. Так по итогам даже проще будет, ибо вы сможете присобачить кучу своих кастомных аттрибутов к этому компоненту, чтобы потом все это дело легко стилизовать, не заставляя себя на каждом шагу запихивать убогую конструкцию в виде
    <svg>
      <use blah blah>
    </svg>


    Ну и для поддержки ИЕ9+ юзайте это https://github.com/Keyamoon/svgxuse (просто подключили на страницу и все работает).

    Тут вот статья по иконкам в реакте - https://www.sitepoint.com/a-working-svg-workflow-f...
    В ней в комментах имеется описание моего подхода (особенно пункт 4) - https://www.sitepoint.com/a-working-svg-workflow-f...
    Ответ написан
    Комментировать
  • Как потоково работать с аудио из браузера?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    https://developer.mozilla.org/en-US/docs/Web/API/M... (navigator.getUserMedia устарел, по инфе мдн).
    И с этим связано куча другой фигни. Надо просто как следует погуглить (по английски конечно же).
    Изучал эту тему полгода назад, без проблем смог найти пачку гайдов по стримингу аудио/видеопотоков на бэкенд, с последующей обработкой и отправкой юзеру обратно в измененном виде.

    Вот какой-то рандомный гайд - https://subvisual.co/blog/posts/39-tutorial-html-a...
    Гуглите что-то типа "javascript stream audio to server"
    Ответ написан
    2 комментария
  • Как на jquery указываются координаты и прочие опции svg path?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Щито?
    JQ вообще почти не дружит с svg. И вообще сформулируйте вопрос нормально, а то за "это надо в джейквери" хочется расстрелять.
    Ответ написан
    2 комментария
  • Как вот так анимировать иконки, что используется для этого?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Вариант с гиф это совсем уж извращение.
    1 вариант по идее можно сделать с помощью svg gooey фильтра (комбинация блюра с контрастом, которая дает эффект перетекания).
    Но чаще всего такое делают либо с помощью спрайтов (устаревший, но простой вариант), либо с помощью bodymovin (js плагин для After Effect, вы экспортите анимацию из AE и юзаете в нем).
    Ну и конечно есть вариант такое руками с помощью SVG запилить, но это крайне нерациональный подход на фоне того что я описал выше.
    Ответ написан
    Комментировать
  • Что выбрать в качестве отступов в js, пробелы или табы?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    2 пробела, которые ставятся табом. Настраивается в любом редакторе, включаяя notepad++.
    Ответ написан
    Комментировать
  • Как сделать сгибающие блоки при наведении, как здесь http://waaark.com/?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    У них это сделано на канвасе. То есть 3 бэкграунда для блока просто фоном сделаны канвасом, который реагирует на движения мышью. Есть конечно вариант сделать такое на свг, но там могут быть проблемы с адаптивностью и сохранением адекватного aspect ratio (даже со спец атрибутами viewBox и preserveAspectRatio можно будет помучаться).
    У меня имеется несколько демок с похожим эффектом (на свг):
    codepen.io/suez/pen/emjwvP - вот тут простой drag effect, который просто меняет одну координату арки.
    codepen.io/suez/pen/epgZjK - вот тут более продвинутый пример, где я уже юзаю Cubic Bezier Curve, а не арку или квадратичную Безье.
    У меня варианты на rAF велосипедах, с гсапом это все дело должно быть явно проще.
    Ответ написан
    Комментировать
  • Не могу понять, что за ошибка?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Ну написано же
    at Gulp.<anonymous> (C:\Users\kotov\gulpfile.js:109:5)

    На 109 строчке у вас это
    watch([path.watch.complex], function(event, cb) {
            gulp.start('style2:build');
         });

    Complex при этом внутри path.watch естественно нет, о чем вам и говорит эта ошибка. Причем этот блок кода потом еще и повторяется.
    Ответ написан
  • Что обозначает такая функция?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    1) Функция чекает все картинки, и те, которые не обернуты в анкор (a), оборачиваются в ссылку, которая указывает на картинку, чтобы юзер мог кликать по картинке и открывать её в отдельной вкладке.
    2) В первом случае, функция назначается элементу объекта. То есть становится методом модуля или не знаю что у вас там. Во 2 случае js должен выдавать ошибку, ибо точки в названии функции быть не должно.
    Ответ написан
    Комментировать
  • CSS vs JS - Какой код работает быстрее?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Если речь идет о столь примитивном сайте, то без разницы.
    Ответ написан
    Комментировать
  • Как обратиться к элементу с пробелом в название на Jquery?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Сейчас бы понять, откуда у вас переменные состоящие из двух слов, которые разделены пробелом.
    А не работает, ибо получается селектор вида #word1 word2 (то есть элемент word 2 внутри айдишника word1), ну и соответственно ничего подобное querySelector и не находит.
    Ответ написан
    Комментировать
  • Как показать в портфолио скриншот мобильной версии сайта?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Что там использовать то, хоспади. Вы что ф12 не умеете нажимать? Там тупо картинки в контейнеры вставлены, которые скроллятся в оверфлоу. До жути примитивно и уныло.
    Ответ написан
    Комментировать
  • Обращение к динамически созданному классу JQuery?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Юзайте простейшее делегирование (всегда).
    $(document).on('click', '.%className%', function() {
      //actions
    });
    Ответ написан
    1 комментарий
  • Как в Angular уйти от включения JS-файлов в index.html?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    На нормальном проекте должна быть инфраструктура с галпом/вебпаком. Если вам самим лень в таком копаться, погуглите готовые генераторы yeoman с angular+webpack/gulp. Жизнь сразу станет проще и веселее.
    Ответ написан
    3 комментария
  • Как сделать динамическое появление страницы на странице?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Создаете простой контейнер высотой в весь экран (100vh).
    Расположите его например с помощью position: fixed как есть c left: 0; top: 0; (по идее надо без фикседа, но в этом случае надо основной контент запихивать в свой контейнер, сами разберетесь).
    Далее задаете transform: translate3d(0,100%,0); для этого контейнера чтобы он по умолчанию находился снизу.
    По клику загружаете внутрь контент. Можно хоть примитивным $.load api.jquery.com/load обойтись, но по хорошему лучше использовать шаблонизатор и с сервера получать только сам контент получать, без левой фигни.
    Как только загрузилось (в случае с получением данных в виде json все должно работать почти моментально) добавляете блоку класс, чтобы он выехал красиво снизу.
    Но это только основа. Помимо этого еще надо будет делать много всяких мелочей, чтобы по итогам все смотрелось красиво и никого не раздражало.
    У них кстати на сайте кривовато сделано. При открытии "истории" меняется урл на #history, но если кликнуть браузерный "назад" то урл поменяется, а вот страничка назад не уедет, хотя это вполне простой функционал.

    EDIT: чекнул сейчас сайт получше, там ничего динамически не подгружается, у них все заранее загружено в контейнеры, то есть совсем все просто.
    Ответ написан