Плавная прокрутка без jQuery | Smooth scroll without jQuery

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 พ.ย. 2024

ความคิดเห็น • 64

  • @enjoymtx
    @enjoymtx 4 ปีที่แล้ว +2

    Около года учусь фронтэнду и периодически натыкаюсь на ваши видео. Всегда очень понятно и доступно, у вас очень хорошее умение преподавания!!

  • @gevorgmovsisyan5153
    @gevorgmovsisyan5153 4 ปีที่แล้ว +3

    Урааа, наконец то вернулись нормальные видео старых форматов

  • @СергейЗагорский-б9ж
    @СергейЗагорский-б9ж 2 ปีที่แล้ว

    Вау! Я пол недели сидел разбирал сложный код на оверфлоу, закипал, а тут так просто оказывается.. Но думаю там было сложно из-за кроссбраузерности, но мне пока и так норм! Большое спасибо автору!

  • @deadscorpion1200
    @deadscorpion1200 4 ปีที่แล้ว +3

    Ещё вчера я задумался над тем, как можно грамотно и без геморроя, а самое главное - красиво сделать прокрутку, и уже сегодня вышел твой видос) спасибо тебе, Артём, большое!))

    • @eugenbelousov5027
      @eugenbelousov5027 4 ปีที่แล้ว +1

      html {scroll-behavior: smooth}

    • @Дмитрий-х2й5р
      @Дмитрий-х2й5р 4 ปีที่แล้ว

      @@eugenbelousov5027 в Хроме вот так разве работает?

  • @loveanime6598
    @loveanime6598 3 ปีที่แล้ว +3

    А что если не работает даже в исходнике урока на Codepen ?

  • @ykr0p4k2
    @ykr0p4k2 4 ปีที่แล้ว +1

    Спасибо большое, очень долго искал подобное видео и вот от моего любимого блогера.

  • @Дима-э1ы5ж
    @Дима-э1ы5ж 2 ปีที่แล้ว +1

    У меня в google chrome, не работает плавно, оно резко перемещает, что делать?

  • @pawpawqwertyuiop
    @pawpawqwertyuiop 2 ปีที่แล้ว

    чистый js, чистый кайф
    спасибо!

  • @fis951
    @fis951 4 ปีที่แล้ว

    Отличный ролик! Спасибо Артём, на чистом js это вообще великолепно. Обязательно испытаю.

  • @diasoralbekov6465
    @diasoralbekov6465 3 ปีที่แล้ว

    спасибо за исходники!!!!

  • @bestviners3383
    @bestviners3383 3 ปีที่แล้ว

    КРасавчик))) спасибо большое))

  • @Немножкоматематикинемногошахма

    Искал другое, наткнулся на это, ничего страшного, плюс одно знание в копилочку, и макс топчик, рекомендую вам его плейлист с js плагинами, и ещё js решения, очень полезная, тема, впервые вижу годную рекламу

  • @olezhonnv3215
    @olezhonnv3215 3 ปีที่แล้ว

    А если елемент вложен будет? ОфсетТоп даёт офсет к топу родителя. И то - с нюансами. Его вычислять придется, если родитель не боди.

  • @ДенисСкворцов-к4ъ
    @ДенисСкворцов-к4ъ 4 ปีที่แล้ว

    класс,Артем)как раз допиливаю сайт и искал как сделать прокрутку.Нашел только на css(scrool-behavior:smooth).Но не всеми браузерами поддерживается

  • @ВладФирсов-ы5ш
    @ВладФирсов-ы5ш 4 ปีที่แล้ว

    Спасибо! Тема с координатами очень замороченная..
    Если будут еще примеры (чуть сложнее желательно) - будет здорово!
    Лайк.

  • @Влад-ъ9г8м
    @Влад-ъ9г8м 3 ปีที่แล้ว

    Как вы в 1 клик эмоджи добавили?

  • @brodovoi
    @brodovoi 4 ปีที่แล้ว +1

    Вот тоже работающий (в safari тоже) вариант на js
    // Scroll to anchors
    (function () {
    const smoothScroll = function (targetEl, duration) {
    const headerElHeight = document.querySelector('.header').clientHeight;
    let target = document.querySelector(targetEl);
    let targetPosition = target.getBoundingClientRect().top - headerElHeight;
    let startPosition = window.pageYOffset;
    let startTime = null;

    const ease = function(t,b,c,d) {
    t /= d / 2;
    if (t < 1) return c / 2 * t * t + b;
    t--;
    return -c / 2 * (t * (t - 2) - 1) + b;
    };

    const animation = function(currentTime){
    if (startTime === null) startTime = currentTime;
    const timeElapsed = currentTime - startTime;
    const run = ease(timeElapsed, startPosition, targetPosition, duration);
    window.scrollTo(0,run);
    if (timeElapsed < duration) requestAnimationFrame(animation);
    };
    requestAnimationFrame(animation);
    };
    const scrollTo = function () {
    const links = document.querySelectorAll('.js-scroll');
    links.forEach(each => {
    each.addEventListener('click', function () {
    const currentTarget = this.getAttribute('href');
    smoothScroll(currentTarget, 1000);
    });
    });
    };
    scrollTo();
    }());

  • @Tiikiirus
    @Tiikiirus 4 ปีที่แล้ว +1

    Артем , спасибо, как всегда полезно! У меня вопрос, а что делать , если вдруг Ты сделал уже вот такой скролл а тебе прилетает правка на сафари или ie, т е нужно все реализовывать по другому с нуля или можно использовать обходной путь и что-то добавить, подскажи пожалуйста.

    • @Glo_Academy
      @Glo_Academy  4 ปีที่แล้ว +2

      В таком случае нужно искать другое кроссбраузерное решение. Например, построенное на requestAnimationFrame

  • @SebastjanPereiro
    @SebastjanPereiro 4 ปีที่แล้ว

    А функцию scrollTo(footer) обязательно запихивать в стрелочную функцию в навешивании click на button? можно просто button.addEventListener('click', scrollTo(footer))?

    • @MrVebber
      @MrVebber 4 ปีที่แล้ว

      В таком случае эта функция запустится независимо от того, нажал пользователь на кнопку или нет. Колбек функция как раз решает эту проблему

  • @tranedev
    @tranedev 4 ปีที่แล้ว

    Круто и главное просто)

  • @JayQueezy-ry3om
    @JayQueezy-ry3om 3 ปีที่แล้ว +1

    почему пишет "невозможно прочитать свойство offsetTop, равное нулю"
    кто знает можете ответить буду благодарен

    • @AnatoliySharov
      @AnatoliySharov 3 ปีที่แล้ว

      скорее всего опечатка в имени элемента. так же было.

  • @max_syniuk
    @max_syniuk 4 ปีที่แล้ว +1

    Почему бы не повешать в css на body {scroll-behavior: smooth} и якоря, так же проще?

    • @vladi4507
      @vladi4507 4 ปีที่แล้ว

      scroll-behavior: smooth; тоже не поддерживает в сафари

  • @vitalb7907
    @vitalb7907 4 ปีที่แล้ว +1

    Это все классно конечно. Но а как быть когда я просто создаю ссылку и привязываю ее к якорю?) можно ли как то так же грамотно скролить абсолютно все на странице?) что есть что бы был универсальная функция

    • @Glo_Academy
      @Glo_Academy  4 ปีที่แล้ว

      Да, в обработчик засунуть все ссылки, а не отдельную кнопку

  • @vadimsokolovsky4940
    @vadimsokolovsky4940 4 ปีที่แล้ว

    Я по привычке включил видос твой посмотреть, и если поддержка была в начале видоса, я бы дальше не смотрел)

    • @Glo_Academy
      @Glo_Academy  4 ปีที่แล้ว

      Поэтому я и не поставил поддержку в самое начало)

  • @AlexanderShutter
    @AlexanderShutter 3 ปีที่แล้ว

    А почему addEventListener, когда на элемент button можно повесить событие onclick. Вот так - buttton.onclick = function() {}

    • @eyeofthenight
      @eyeofthenight 3 ปีที่แล้ว

      А как дальше сделать скажи пожалуйста

  • @ilyaponomarev9279
    @ilyaponomarev9279 4 ปีที่แล้ว

    В jQuery же метод работает во всех браузерах, как они добились этого

    • @whatthepeople
      @whatthepeople 4 ปีที่แล้ว +1

      с помощью requestAnimationFrame

  • @gio2156
    @gio2156 4 ปีที่แล้ว +2

    Дайте ка угадаю свойство scroll-behavor)

    • @chugundur
      @chugundur 4 ปีที่แล้ว

      Не угадал)

    • @gio2156
      @gio2156 4 ปีที่แล้ว

      @@chugundur да я понял уже , по названию подумал что на цсс будет а там только это свойство поможет хоть и поддержка не супер

  • @alexandrbasiuk7358
    @alexandrbasiuk7358 4 ปีที่แล้ว +8

    На іе пофіг, а вот сафари это важно

  • @eugenbelousov5027
    @eugenbelousov5027 4 ปีที่แล้ว

    а зачем это делать на js, если можно просто на css одну строку написать и по якорям прыгать

    • @SebastjanPereiro
      @SebastjanPereiro 4 ปีที่แล้ว

      а как это на css плавно сделать?

    • @АннШ
      @АннШ 4 ปีที่แล้ว

      перемещаться будет, но резка. Плавность только через JS добавляется.

    • @SebastjanPereiro
      @SebastjanPereiro 4 ปีที่แล้ว

      @@АннШ, вы уверены? Резко перемещаться по якорям это просто обычное поведение html-ссылки по #id. Однако Dmitrij Yakovenko что-то про строчку.css написал, я вот и удивляюсь, что это за секретный метод?

  • @krikotik
    @krikotik 4 ปีที่แล้ว +3

    А теперь давайте научу плавной прокрутке на чистом css, без js 😏
    html {
    scroll-behavior: smooth;
    }
    Поздравляю!

    • @cerberuscsgoandmore6968
      @cerberuscsgoandmore6968 4 ปีที่แล้ว

      Правда с поддержкой беда небольшая. Что в первом, что во втором случае. + Id блока останется в url

    • @Tiikiirus
      @Tiikiirus 4 ปีที่แล้ว

      И все ? :) И везде работает?

    • @_oxios_
      @_oxios_ 4 ปีที่แล้ว +3

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

  • @ВадимЯковенко-я1в
    @ВадимЯковенко-я1в 4 ปีที่แล้ว

    а давайте кроссбраузерно как то? через интервал может

    • @Glo_Academy
      @Glo_Academy  4 ปีที่แล้ว

      Да, есть вариант через интервал

  • @3смехавминуту
    @3смехавминуту 2 ปีที่แล้ว

    у меня даже в chrome не работает

  • @rasulali4690
    @rasulali4690 4 ปีที่แล้ว +5

    То же самое можно было сделать при помощи обычного CSS с его "body { scroll-behavior: smooth; }" с такой же хреновой поддержкой

    • @AlexanderShutter
      @AlexanderShutter 3 ปีที่แล้ว

      Тогда придется якоря использовать, париться с id и загаживать URL. А пример довольно простецкий. Можно и мудренее прокрутки придумать благодаря JS.

  • @microlabig
    @microlabig 4 ปีที่แล้ว +3

    А ведь можно обойтись и вот этим методом Element.scrollIntoView() - developer.mozilla.org/ru/docs/Web/API/Element/scrollIntoView

    • @TurchynykOleksii
      @TurchynykOleksii 4 ปีที่แล้ว +2

      а главное поддержка почти всего) меня больше смутило использование стрелочных функций с es6 и переменной через var es5...2020 в конце концов, переменной var должен пользоваться лишь babel для кроссбраузерной работы! немного зашкварненько так, ведь более не подготовленые ребята так и будут повторять, а потом будут задавать им вопросы при устройстве на галеру
      "бро, зачем ты пишешь на двух версиях" и вылетит он с таким кодом с этой канторы даже самой бичевской куда подальше без права вернуться и говнокодить... видосы полезные, но ля, code style никто не отменял даже для фрилансеров!!!

    • @AnatoliySharov
      @AnatoliySharov 3 ปีที่แล้ว

      от души! благодаря этой ссылочке замутил быстро то, что нужно.
      а по видео не робит.

  • @derw1sz
    @derw1sz 4 ปีที่แล้ว +8

    10 минут потраченного зря времени, на кой нужен этот метод если не работает в IE/Safari? В какой вселенной может существовать проект на который не будут заходить из этих браузеров?

  • @samandartemirxodjayev7139
    @samandartemirxodjayev7139 4 ปีที่แล้ว

    Зделай вёрстку сайтов в live

  • @olgapolskolg1112
    @olgapolskolg1112 3 ปีที่แล้ว +1

    кто в 2020 году использует ES5? :C

    • @evgeniykolmak5459
      @evgeniykolmak5459 2 ปีที่แล้ว

      Они ещё обучают этому за деньги 😅

    • @kremlin_agent-_-
      @kremlin_agent-_- 2 ปีที่แล้ว

      Здравствуйте!

  • @Vladimir_Khokhlov
    @Vladimir_Khokhlov ปีที่แล้ว

    Капец! Это же не плавный скролл! Это плавный якорный переход...