JS-решения №12. Базовая анимация при скролле на чистом JS

Поделиться
HTML-код
  • Опубликовано: 25 авг 2024
  • Привет! В новой части JS-решений я покажу, как сделать простую и удобную анимацию по скроллу на чистом js)
    github.com/max... - исходники видео на GitHub
    Меня зовут Максим Васянович. Фрилансер уже 5 лет, создал более 50 коммерческих сайтов. Преподаватель в онлайн-университете Skillbox, автор курса Веб-верстка.
    Понравилось? clck.ru/Gr9Ec
    Моя страница вконтакте: maxdenaro
    Мой блог: blog.maxgraph.ru
    Мой сайт: maxgraph.ru
    Канал в телеграм: teleg.run/maxg...
    Чат для верстальщиков: teleg.run/maxg...
    #ityoutubersru #скролл #анимацияприскролле

Комментарии • 87

  • @user-cf6vl5xe2d
    @user-cf6vl5xe2d Год назад +16

    гениальность - это когда ты повторяешь весь код и он не работает и только с третей попытки ты понимаешь что просто не подключила скрипт. Браво

  • @alexandrgusletsov2567
    @alexandrgusletsov2567 3 года назад +3

    Мах спасибо , всегда радуете начинающих кодеров!

    • @maxgraph
      @maxgraph  3 года назад

      Пожалуйста)

  • @TheZUB95
    @TheZUB95 3 года назад +2

    супер урок,спасибо
    как не хватало таких разборов,я новичёк в js и эти уроки визуализируют прочитанную теорию
    успехов!

    • @maxgraph
      @maxgraph  3 года назад

      Спасибо)

    • @TheZUB95
      @TheZUB95 3 года назад

      @@maxgraph у вас отличная подача,есть в планах сделались подробный гайд по оптимизации скорости wp,это было бы очень полезно и интересно

  • @alseos4023
    @alseos4023 Год назад +2

    1:45 Господи, как же мне сильно нужна была эта анимация, но никак её не мог найти! Спасибо вам огромное!!!😮😮😮😁😁😁 Продолжайте снимать в том же духе!!!🎉😁😁

    • @EugeneKh.
      @EugeneKh. 10 месяцев назад

      используй IntersectionObsrverAPI вместо скролла

  • @aleksandrkhabarov6026
    @aleksandrkhabarov6026 3 года назад +4

    Классный урок, все доходчиво)) Только вместо все у нас будет хорошо, хотелось бы слышать что будет делать код))) А так всё очень понравилось!

  • @user-tz8xo5wj1o
    @user-tz8xo5wj1o 3 года назад +2

    Топовый контент! Спасибо!

  • @user-vm2db5cq1g
    @user-vm2db5cq1g Год назад

    Полезное видео! Спасибо! Отличный канал))

  • @super_snejinka
    @super_snejinka 3 года назад

    Максим, спасибо огромное за это видео, попалось как нельзя кстати! Я не видела продолжения, еще нет на канале? И еще раз спасибо, твои видео уже не раз меня спасали

    • @maxgraph
      @maxgraph  3 года назад

      Продолжение было) анимация плагином

  • @plantlife1710
    @plantlife1710 3 года назад

    Все как всегда, четко и полезно! Но скрол ведь событие которое вызывается миллион раз, intersection observer как вариант

    • @maxgraph
      @maxgraph  3 года назад +1

      Да, как вариант)

  • @amaronov
    @amaronov Год назад

    Помогло, спасибо!

  • @marishakarpova8278
    @marishakarpova8278 3 года назад

    Отличное видео 👍 Всё доступно и понятно, буду экспериментировать 😊 Продвижения каналу 😉

  • @MeME59356
    @MeME59356 8 месяцев назад

    Спасибо за отличное решение

  • @DerAleksey
    @DerAleksey Год назад

    пошёл пробовать

  • @epicshorsviral
    @epicshorsviral Год назад

    Мое почтение 👍

  • @galievramil1169
    @galievramil1169 Год назад

    Классно

  • @Maxim9575
    @Maxim9575 3 года назад

    А это хорошая идея для небольшого плагина :)

    • @user-cz7px1om1o
      @user-cz7px1om1o 3 года назад

      Это база для любого сайта.

  • @Andrey_4dev
    @Andrey_4dev 3 года назад

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

    • @goodman4493
      @goodman4493 3 года назад +1

      +
      Сталкиваясь с этим вопрос все упускают важный момент - производительность. Добавляя допустим какой-нибудь цикл в обработчик scroll, означает, что каждый раз при скролле это будет запускаться очень много раз, тем самым влияя на производительность.
      И на это очень мало информации, и почему-то всеми игнорируется.

  • @1Nurali
    @1Nurali 2 года назад

    вот бы gsap на этот канал. Чумовая штука

    • @maxgraph
      @maxgraph  2 года назад

      Есть уже несколько)

  • @NotForSale49
    @NotForSale49 Год назад

    У функции, добавляющей класс animation-class есть очень интересный баг точнее это даже не баг, а просто особенность метода offsetTop. Если прописать position:relativе родительскому контейнеру, в котором содержатся элементы с классом scroll-item, то при попытке скролла им сразу присвоится animation. вот такие дела, вместо offsetTop можно вариант с getBoundingClientRect нарисовать.

    • @user-hw9iu6fe8x
      @user-hw9iu6fe8x 6 месяцев назад

      Здравствуйте в двух проектах такой баг, не подскажите как исправить )

    • @NotForSale49
      @NotForSale49 6 месяцев назад

      @@user-hw9iu6fe8x Я уже точно не помню, один из вариантов это использовать getBoundingClientRect, второй вариант это поменять стили, третий вариант взять offsetTop до нужного блока, потом получить его высоту и уже исходя из этой высоты прописывать анимацию при скроле для элементов.

  • @user-jh5pw6lv9k
    @user-jh5pw6lv9k 3 года назад

    хорошее, полезное видео. расскажи о горизонтальной анимации как в конце видео.

  • @Sufferer12
    @Sufferer12 Год назад

    Спасибо за уроки. Скажите, почему может animation-class сразу присваиваться, никаких изменений не происходит при скролле?

  • @miraigrafit7865
    @miraigrafit7865 3 года назад

    Очень круто! Я для себя еще добавил дата атрибут, если он есть, то анимация проигруется лишь раз, если нету, то повторяется при скролле обратно, как на видео. Ты обычно используешь именно что-то свое для анимации, или подключаешь стороннее?

    • @maxgraph
      @maxgraph  3 года назад +1

      Да по-разному. Могу и greensock подключить

  • @vodoo8854
    @vodoo8854 3 года назад

    Здравствуйте! А когда будет Js, вроде хотели делать!? Отдельное спасибо за полезный и качественный контент!

    • @maxgraph
      @maxgraph  3 года назад +1

      Здравствуйте, делаю. Хочу сперва все сделать, потом выкладывать)
      Через месяц-два будет

    • @vodoo8854
      @vodoo8854 3 года назад

      @@maxgraph понял. Ждём) Спасибо

  • @_onesevenfive_
    @_onesevenfive_ 3 года назад

    Thanks a lot

  • @k0rsoYD
    @k0rsoYD 2 года назад

    хотелось бы послушать про Gsap, а точнее про ScrollTrigger и что-то тяжелее чем простые фишки

    • @maxgraph
      @maxgraph  2 года назад

      Уже есть кое что на канале

  • @dmitryg.9533
    @dmitryg.9533 Год назад

    не могу понять, а в чём разница анимации через keyframes или просто через транзишены? просто удобством ?

    • @maxgraph
      @maxgraph  Год назад

      Кейфреймы можно вызывать без событий (наведение и тд)

  • @user-hw9iu6fe8x
    @user-hw9iu6fe8x 6 месяцев назад

    Максим здравствуйте, помогите решить проблему) анимация некоторых элементов не срабатывает. я так понимаю из за position relative у родителя. Это связанно offsetTop? как это исправить или чем заменить offsetTop?

    • @maxgraph
      @maxgraph  6 месяцев назад

      Я бы посмотрел в сторону intersection observer

  • @mister_robot01
    @mister_robot01 3 года назад

    Может вы расскажете про библиотеку GSAP ? Например сделать какую то крутую анимацию с ним)

    • @maxgraph
      @maxgraph  3 года назад +3

      Расскажу

    • @lastchancehider
      @lastchancehider 3 года назад

      @@maxgraph лично я еще бы глянул примеры использования нативного js вместо gsap. Как в этом ролике, к примеру. (замена gsap scrollTrigger в 20ти минутном видео (: )
      Контент топ, спасибо вам

  • @konstantinkuznetsov4415
    @konstantinkuznetsov4415 3 года назад

    Спасибо за полезное видео. А как сделать, чтобы анимация срабатывала только один раз. То есть при повторном скроле просмотренного участка она не срабатывала?

    • @maxgraph
      @maxgraph  3 года назад +2

      Убрать else в условии, чтобы класс не удалился

  • @user-vt1od4do5i
    @user-vt1od4do5i 3 года назад

    Видео интересное! Так держать! У меня тут один вопрос есть. У меня есть фиксированная шапка. Как сделать так, чтобы шапка исчезала при скролле вниз а когда вверх - появилась снова? Коды, которые находила в интернете, не работали😢 А я новичок и не понимаю в чём проблема

    • @maxgraph
      @maxgraph  3 года назад

      Прямо сегодня выйдет видео на эту тему))

    • @user-vt1od4do5i
      @user-vt1od4do5i 3 года назад

      @@maxgraph ❤️👍🤗

  • @sweetknitt4259
    @sweetknitt4259 2 года назад

    снимите, пожалуйста, видео про анимацию при скролле на jquery. Анимацию сделала по вашему уроку, но она не работает в Таплинке.

    • @maxgraph
      @maxgraph  2 года назад +1

      Вряд ли на канале будет что-то по jq, извините)

  • @imeewiz516
    @imeewiz516 2 года назад

    А как сделать, чтобы при загрузке страницы, анимация первого блока срабатывала автоматически? А то когда пользователь условно заходит на страницу сайта, необходимо проскролить немного вниз, чтобы началась анимация у объектов первого блока. Получается не очень красиво(

    • @maxgraph
      @maxgraph  2 года назад

      Можно вызвать анимацию не на скролл, а просто

    • @imeewiz516
      @imeewiz516 2 года назад

      @@maxgraphточно, спасибо!

  • @user-vi8jd8fy9l
    @user-vi8jd8fy9l 3 года назад

    Здравствуйте, можно ли использовать этот код в react.js??

    • @Maxim9575
      @Maxim9575 3 года назад

      А почему нет?

  • @user-gp5cq8pp1o
    @user-gp5cq8pp1o 3 года назад

    Зачем в скрипте задавать маргин для отступа за навигацией? Не лучше ли будет сделать навигацию абсолютной и отступ задать заранее в стилях уже

    • @maxgraph
      @maxgraph  3 года назад

      Не лучше, а одно из решений

    • @user-gp5cq8pp1o
      @user-gp5cq8pp1o 3 года назад

      @@maxgraph ну как же
      Если все это будет прописываться из скрипта то нагрузка будет на много больше ежели прописывалось бы сразу же из стилей

    • @user-gp5cq8pp1o
      @user-gp5cq8pp1o 3 года назад

      @@maxgraph ну может я ошибаюсь, я совсем новичок можно сказать ахах

  • @DeadStiks
    @DeadStiks 2 года назад

    Так всё отлично и понятно, но вот часть функций не работает и всё тут. С margin на самом деле полезное решение, т.к. в стилях не всегда получается его прописать, особенно когда речь идёт об относительных величинах, которые могут меняться в зависимости от объёма контента. Но эта зараза не хочет выводить переменные значения, выводит лишь постоянные, типа '80px' или 'unset', а высчитывать что-то отказывается. Рад, что хоть с шапкой сайта проблем нет. )))

    • @maxgraph
      @maxgraph  2 года назад

      Не понял, что именно не работает))

    • @DeadStiks
      @DeadStiks 2 года назад

      @MaxGraph - cайты как страсть
      Вместо hero.style.marginTop = '${header.offsetHeight}px' сразу выводится значение hero.style.marginTop = '0px' и не реагирует на прокрутку. И с многозадачной анимацией элементов scrollItems проблемы - сразу присваивается элементам класс animation-class и не реагирует на скролл страницы. Хотя вполне возможно, что я где-то накосячил, но вроде всё раз 10 перепроверил ничего не нашёл. Либо у Wordpress есть какие-то особенности.
      Я не силён в JS от слова совсем. Только по урокам и остаётся хоть как-то разнообразие на сайт вносить. 😄

    • @maxgraph
      @maxgraph  2 года назад +1

      Где-то косячок в коде, не иначе)

    • @DeadStiks
      @DeadStiks 2 года назад

      @@maxgraph Ок. Понял. Спасибо. Значит буду дальше колупать код, есть смысл. ))

    • @DeadStiks
      @DeadStiks 2 года назад

      @MaxGraph - cайты как страсть
      Я явно чего-то не понимаю 😩
      const paddingHeight = scrollItemsTop.offsetTop; //в консоле выводит 184px, прокрутка на значение не влияет - то, что нужно.
      scrollCont.style.paddingTop = '184px'; - пишешь так, всё работает.
      scrollCont.style.paddingTop = '${paddingHeight}px'; - а так не хочет, хотя разницы по идеи никакой нет. Так даже внутренний отступ в стиль блока не подгружает.😵‍💫
      И здесь статически в CSS не задать, как писали в комментариях ниже, т.к. у каждой страницы это расстояние от верхнего края блока до верхней границы экрана будет своё и зависит от наполнения. Так, что отступы через JS штука нужная. 👍

  • @denysmaksymuck
    @denysmaksymuck 3 года назад

    Что означает название переменой hero?

    • @maxgraph
      @maxgraph  3 года назад

      Так принято называть первый блок сайта

  • @user-pf1wb2nx8b
    @user-pf1wb2nx8b 3 года назад

    Это просто сделать. А как сделать анимацию объектов при скроллинге? Я имею ввиду такую анимацию: south-stream-transport.com

    • @maxgraph
      @maxgraph  3 года назад

      scrollTrigger в GSAP, видимо)

    • @user-pf1wb2nx8b
      @user-pf1wb2nx8b 3 года назад

      @@maxgraph А можно как-то по другому сделать, а то очень сложно таким способом понять.

  • @EvgenOl
    @EvgenOl 2 года назад

    Вот не пойму зачем так много писать и так долго на ванильном js если всё то-же самое на jq делается в 2 строки. Хотя наверное для урока и лучшего понимания материала оно и надо. Но для работы мало применимо, когда у тебя сроки и нет времени писать это всё каждый раз ради элементарных эффектов.

    • @maxgraph
      @maxgraph  2 года назад

      Jq - лишняя нагрузка, лишние килобайты

    • @EvgenOl
      @EvgenOl 2 года назад

      @@maxgraph ага, только килобайта перестали экономить лет 20 назад. Клиент всё равно попросит подключить пять пикселей, чат, капчу и прочую хрень. QJ от этого добра 1% займёт. А вот время разработки сокращает кратно.

    • @maxgraph
      @maxgraph  2 года назад

      Ничего подобного) как экономили, так и экономят

    • @EvgenOl
      @EvgenOl 2 года назад

      @@maxgraph у тебя ода жизнь. Чтобы сэкономить килобайт ты тратишь несколько минут жизни. Это невосполнимый ресурс. А браузер сэкономленный килобайт не заметит. JQ весит меньше чем фотка, что там экономить на спичках то? Лучше бы жизнь поэкономил. Но как знаешь...

    • @maxgraph
      @maxgraph  2 года назад

      А я то причём тут😀😀