Учим JavaScript 29. Плавная прокрутка страницы вверх

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

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

  • @lancylancy8219
    @lancylancy8219 5 ปีที่แล้ว

    спасибо большое. Посмотрел урок, выучил команды, написал скрипт (немного отличающийся, писал сам), и заметил, что для более правдоподобной анимации скроллинга лучше установить таймер (я использовал интервал) на меньшее число (допустим 1), а убавление скроллинга на нужную скорость.
    К примеру у меня страница (Lorem*100) в 2700 пикселей (или в чем измеряет функция window.pageYOffset), и я установил интервал на 1, скорость на 1, и у меня получилась очень медленная, плавная красивая анимация. правда очень долгая, так как большая страница. Поставил скорость на 8 получилось в самый раз.
    Итог: Урок познавательный и мне очень понравился. Ставлю лайк и подписываюсь, канал интеесен. Вам удачи и большое спасибо, @WebDev с нуля. Канал Алекса Лущенко

  • @arthurshaidullin7981
    @arthurshaidullin7981 6 ปีที่แล้ว +6

    отлично, то чего и хотелось, а пока хотелось я делал так,
    window.scrollTo({
    top: 0,
    behavior: "smooth"
    });
    просто вставьте в консоль и попробуйте )

  • @Евгений-г5с6ъ
    @Евгений-г5с6ъ 7 ปีที่แล้ว +17

    Спасибо за отличные уроки, очень мне помогли, начал изучал благодаря каналу так- же aj и пых, спасибо, очень увлекательно, благодаря вам погрузился в мир веб - разработки

    • @itgid
      @itgid  7 ปีที่แล้ว +5

      Добро пожаловать!

  • @ЕкатеринаКоктыш-н8ж
    @ЕкатеринаКоктыш-н8ж 2 ปีที่แล้ว

    Спасибо за урок! Все четко и ясно) Очень помогли с дополнением курсового проекта полезной кнопочкой!

  • @pendalfgrey1
    @pendalfgrey1 6 ปีที่แล้ว +9

    на jQuery
    $('a.top').on(click, function(){
    $(document.body).animate({scrollTop : 0},800);
    return false;
    });
    // параметры
    0 - px от верха страницы,
    800 - длительность анимации.

  • @АртемЧепиль
    @АртемЧепиль 5 ปีที่แล้ว +1

    На доступном языке! Спасибо большое!

  • @ВладимирКириллов-и6ь
    @ВладимирКириллов-и6ь 7 ปีที่แล้ว +10

    супер, было бы здорово, если бы Вы показали взаимодействие PHP и JS (как совместить переменные)

  • @dimasok776
    @dimasok776 5 ปีที่แล้ว

    Спасибо огромное! На основе вашего скрипта сделал прокрутку до нужного якоря - просто вместо координат топа (0.0), использовал document.getElementById('yakor').offsetTop и заменил в цикле знак больше на меньше и минус на плюс :)

  • @ИльяНесмиянов-ф1ч
    @ИльяНесмиянов-ф1ч 5 ปีที่แล้ว +1

    Спасибо огромное! Очень доходчиво и понятно.

  • @ЕвгенияМихалева-ф2э
    @ЕвгенияМихалева-ф2э 7 ปีที่แล้ว +2

    Отличные уроки! Спасибо

  • @spoonjeee4785
    @spoonjeee4785 6 ปีที่แล้ว

    большое спасибо!
    кстати мне кажется лучше будет оперировать не таймером чтобы увеличивать скорость прокрутки.
    например так:
    scrolled = scrolled - 1;
    timer = setTimeout(scrollToTop, 10);

    • @itgid
      @itgid  6 ปีที่แล้ว

      Да, можно.

  • @ИяИя-п2к
    @ИяИя-п2к 5 ปีที่แล้ว +1

    Очень доступно и понятно!

  • @Anton-of9tb
    @Anton-of9tb 7 ปีที่แล้ว +3

    После просмотра возникло несколько вопросов:
    1. Скажите, а почему именно тут заменили defer на внутрискриптовую функцию? Если с defer делать, на что это повлияет?
    2. Если делать скролл блока, то в чем особенности? Как привязать координаты правильно относительно блока, а не всего окна?
    Спасибо.

    • @БадрХари-с2щ
      @БадрХари-с2щ 7 ปีที่แล้ว +1

      тот же вопрос, почему defer убрали. Почему на сайте его не будем использовать?

    • @СветланаРазумовская-й7л
      @СветланаРазумовская-й7л 7 ปีที่แล้ว +1

      Т к defer это нововведение, его не поддерживают старые браузеры, поэтому всё ещё пользуются по старинке window.onload

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

    а не легче button сделать ссылкой на body и плавность с помощью css?

  • @saskirakosyan3788
    @saskirakosyan3788 5 ปีที่แล้ว +2

    Сделайте пожалуйста видео про классов, и прототипное наследование. ? Будет очень полезно.

    • @itgid
      @itgid  5 ปีที่แล้ว

      увы, в один курс это не впишешь, довольно большая работа, но в JS есть куча нюансов - пока не решаюсь на это.

  • @Овації
    @Овації 5 ปีที่แล้ว +1

    Лайк поставил, но лучше через "requestAnimationFrame" делать.
    Движение более плавное будет.

    • @Овації
      @Овації 5 ปีที่แล้ว +2

      @Василий Лотыш,
      let scrolled;
      let timer;
      document.getElementById("top").onclick = function() {
      scrolled = window.pageYOffset;
      scrollToTop();
      }
      function scrollToTop() {
      if (scrolled > 0) {
      window.scrollTo(0, scrolled);
      scrolled = scrolled - 15;
      requestAnimationFrame(scrollToTop);
      }
      else {
      window.scrollTo(0,0);
      }
      }
      requestAnimationFrame(scrollToTop)

    • @hadwayx
      @hadwayx 5 ปีที่แล้ว

      @@Овації спасибо, ты мне помог сделать классную анимацию

  • @armenlalayan9000
    @armenlalayan9000 6 ปีที่แล้ว

    Четко и Понятно... Класс

  • @ВасилийКопылов-д7ж
    @ВасилийКопылов-д7ж 5 ปีที่แล้ว +2

    Подскажите, как с помощью чистого javascript сделать плавную!!! прокрутку до определенного блока. Вот такой код работает, но он без плавной прокрутки
    Моя кнопка
    var btn = document.querySelector('.btn');
    var footer = document.querySelector('.footer');
    btn.addEventListener('click', function(event){
    event.preventDefault();
    var topFooter = footer.offsetTop;
    window.scrollBy(0, topFooter);
    console.log(topFooter);
    });

  • @evgeniyprowork
    @evgeniyprowork 6 ปีที่แล้ว

    с плавной прокруткой получился вариант проще, вероятно он менее гибкий
    document.querySelector('.btn').onclick = function() {
    window.scrollTo({
    top: 0,
    behavior: "smooth"
    });
    }
    руководствовался этим developer.mozilla.org/ru/docs/Web/API/Window/scrollTo

  • @alexandrpritula3525
    @alexandrpritula3525 6 ปีที่แล้ว

    Почему бы не использовать css transition для плавности?

  • @ColorKat
    @ColorKat 5 ปีที่แล้ว

    Подскажите плиз, почему этот код не докручивает странмцу до самого верха?!?!
    function scrollToTop(){
    if(scrolled > 100){
    window.scrollTo(0, scrolled);
    scrolled -= 20;
    timer = setTimeout(scrollToTop, 4);
    }else if(scrolled < 100){
    clearTimeout(timer);
    window.scrollTo(0, scrolled);
    scrolled -= 4;
    timer = setTimeout(scrollToTop, 4);
    }else if(scrolled < 20){
    window.scrollTo(0,0);
    clearTimeout(timer);
    }
    }

    • @itgid
      @itgid  5 ปีที่แล้ว

      нужно смотреть. Киньет на codepen

  • @simongreyse4171
    @simongreyse4171 6 ปีที่แล้ว +9

    Ничего не понял. Но очень интересно.

  • @TigraDP
    @TigraDP 6 ปีที่แล้ว +1

    Здравствуйте. Подскажите, пожалуйста, как запретить повторный вызов функции в момент когда она выполняется? Какой метод лучше подойдет в этом случае? Благодарю.

    • @itgid
      @itgid  6 ปีที่แล้ว

      если вы вызываете функцию по событию - то отменить (снять событие), если нет - можно завести статическую переменную. При запуске функции ставить ее равной 1. Если повторный запуск произошел. Проверяем равна ли переменная 1. Если да - то сразу return. Когда функция выполнилась - ставим 0.

    • @TigraDP
      @TigraDP 6 ปีที่แล้ว

      Благодарю.

  • @Zluka366
    @Zluka366 7 ปีที่แล้ว +1

    Спасибо, ваши уроки очень интересны!:)
    У меня вопрос, почему не сделать скрипт у закрывающего тега body, тога он будет загружаться после загрузки всей страницы, или я не права?(

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

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

  • @andriidou8023
    @andriidou8023 5 ปีที่แล้ว +1

    я чогось не розумію якщо добавляти скріпти в head то получиться така схема (загрузка script => загрузка body => виконання script)
    тоді навіщо заставляти користувача чекати загрузки скріпта з head і дивитись на недогружену сторінку якщо можна його прописати в кінці body і тоді він не буде сповільнювати загрузку основного контенту?
    PS я розумію що у нас тут маленькі скріпти і вони грузяться в мілісекунді але теоретично з великими можуть бути проблемиб хотілося б почути якесь розяснення бо судячи з коментарів багато хто також цього не зрозумів.

    • @itgid
      @itgid  5 ปีที่แล้ว +1

      Так, большие скрипты принято подключать перед закрывающимся тегом body - чтобы не заставлять пользователя ждать.

  • @maramanshow2942
    @maramanshow2942 6 ปีที่แล้ว

    А можно присвоить свойство transition, чтобы была мягкая прокрутка? Спасибо за уроки :)

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

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

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

      Конечно можно, просто это урок для понимания js, а не наведения лоска. Поэтому многие такие моменты упускаю.

  • @TheOneeightytwo
    @TheOneeightytwo 6 ปีที่แล้ว

    наконец я могу позволить себе написать коммент по теме. до начала изучения JS я начал с jQuery(да, это утопия) и уяснил какие-то базовые фишки. в общем начав смотреть этот урок я понял что сам могу сделать такую кнопку. может быть это смешно звучит для бывалых, но такие микро победы придают уверенности. причем тут как раз судя по всему и вырисовываются преимущества jquery(плавно прокручивается). .button display: none в css.
    $().ready(function(){
    button = $(".button");
    $(window).scroll(function(){
    if($(window).scrollTop() > 100){
    button.fadeIn();
    }
    else{
    button.fadeOut();
    }
    });
    button.click(function(){
    $("html, body").animate({scrollTop:0}, 500)
    })
    });

  • @dimageorgiev5798
    @dimageorgiev5798 7 ปีที่แล้ว +1

    спасибо

  • @ДанилОчагов-в7э
    @ДанилОчагов-в7э 7 ปีที่แล้ว +1

    Есть более простой метод и он будет намного плавнее работать:
    document.getElementById("btn").onclick = function scrollTop(){
    window.scrollBy(0,-30); // -30 это скорость,чем дальше от нуля,тем она выше
    if(pageYOffset > 0){
    requestAnimationFrame(scrollTop);
    }
    }

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

    скрежет при нажатии на клавиатуру мешает смотреть

  • @ПятыйЭлемент-й1ф
    @ПятыйЭлемент-й1ф 6 ปีที่แล้ว

    как сделать, что бы кнопка вверх была не видна, а появлялась после начала прокрутки и пропадала если страница вверху?

    • @itgid
      @itgid  6 ปีที่แล้ว +2

      изначально добавляете свойство display:none. На событие прокрутки вешаете функци. Внутри функции проверяете параметр pageY. Когда он больше какого-то значения кнопке делаете display: block/

    • @ПятыйЭлемент-й1ф
      @ПятыйЭлемент-й1ф 6 ปีที่แล้ว

      Александр, спасибо большое. Сделал так и все заработало:
      var top = document.getElementById('top');

      window.onscroll = function(){
      if(window.pageYOffset > 100){
      top.style.display = 'block';
      } else {
      top.style.display = 'none';
      }
      }

    • @oleksiikhatsaiuk3650
      @oleksiikhatsaiuk3650 6 ปีที่แล้ว

      а можно сделать через hidden="true"? Потому что кнопка с стилями bootstrap и display:none не срабатывает.

  • @ludoed_krsk
    @ludoed_krsk 5 ปีที่แล้ว +1

    Почему так много дизлайков?

  • @SocialFoam
    @SocialFoam 7 ปีที่แล้ว +1

    бывают прокрутки супер - плавные с разгоном. Например тут thejadeway.com/ . Интерессно как это реализованно.

    • @itgid
      @itgid  7 ปีที่แล้ว +2

      Зависит от того, как мы наращиваем переменную.

    • @digitalturkistan1857
      @digitalturkistan1857 6 ปีที่แล้ว +2

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

  • @Bogelma
    @Bogelma 6 ปีที่แล้ว

    прикольно конечно но не идеально.. можно сделать так что б оно прыгнула 1 раз наверх (как вначале этого ролика) но мееедленнооо?))

    • @itgid
      @itgid  6 ปีที่แล้ว +5

      Можно. Плагин купите и будет. Ребят вы серьезно? Тратишь время, объясняешь, а вы "прикольно но не идеально"?

    • @Bogelma
      @Bogelma 6 ปีที่แล้ว

      спасибо за уроки, высказал мнение имею право, не нравится - мнение блокируйте или отключайте коменты. чёт нервные все такие

    • @itgid
      @itgid  6 ปีที่แล้ว

      А жизнь такая. Если есть идеи или интересные штуки, которые нужно реализовать - пишите подробно сделаю, просто тяжело понять, прыгнула и т.д.

  • @nikonbugaichuk6596
    @nikonbugaichuk6596 7 ปีที่แล้ว +1

    Ребята, кто еще додумался как сделать прокрутку сверху вниз?
    Вот мое решение
    jsfiddle.net/sy0emmz0/1/
    делитесь своим. Без jquery)

    • @romanchuiko2266
      @romanchuiko2266 7 ปีที่แล้ว

      переменную timerBot можно было не задавать

    • @БадрХари-с2щ
      @БадрХари-с2щ 7 ปีที่แล้ว +1

      test1.onclick = function scrollToDown() {
      scrolled = window.pageYOffset;
      scrolled+=100;
      window.scrollTo(0,scrolled);
      timer1 = setTimeout(scrollToDown, 150);
      console.log(scrolled);
      if (scrolled == (window.pageYOffset+100)) {
      clearTimeout(timer1);
      }

  • @coconut_punker
    @coconut_punker 6 ปีที่แล้ว

    Уроки полезные, но неужели нельзя говорить четче и делать видео в 2 раза короче?... 7 минут чтобы написать 5 строчек кода.. тяжело смотреть

    • @itgid
      @itgid  6 ปีที่แล้ว +1

      Смотрите плейлист javaScript решает!

    • @DanDiablo
      @DanDiablo 6 ปีที่แล้ว +2

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

    • @itgid
      @itgid  6 ปีที่แล้ว +1

      Вся эта серия рассчитана на учеников которые сидят и набирают. Если Rodion это медленно - то на платные курсы плиз.