Скрипт для плавной прокрутки на верх страницы (на JavaScript и на jQuery)

Вверх Предлагаю вашему вниманию скрипт, который плавно прокручивает страницу наверх при клике на соответствующую ссылку. Я сделал 2 варианта: на чистом JavaScript и на jQuery. Выбирайте тот, который вам больше по душе.

Вариант на JavaScript

Можно посмотреть готовый пример.

Код скрипта:

var t;
function up() {
	var top = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
	if(top > 0) {
		window.scrollBy(0,-100);
		t = setTimeout('up()',20);
	} else clearTimeout(t);
	return false;
}

Число -100 – это количество пикселей, которое прокручивается вверх через каждые 0,02 секунды (число 20).

В подходящее место html-кода страницы необходимо добавить такую ссылку:

<a href="#" onclick="return up()">наверх</a>

Вариант на jQuery

Можно посмотреть готовый пример.

Код скрипта:

(function($) {
$(function() {

	$('#up').click(function() {
		$('html, body').animate({scrollTop: 0},500);
		return false;
	})

})
})(jQuery)

Число 500 – это время, в течение которого происходит анимация (прокрутка), в данном случае это полсекунды.

В подходящее место html-кода страницы необходимо добавить такую ссылку:

<a href="#" id="up">наверх</a>

В случае, если в браузере отключен JavaScript, при клике на данную ссылку страница также прокрутится наверх, но только уже не плавно.

Комментарии (66)

  1. 22 марта 2012 г. в 17:12

    Странную фигню увидел я у вас http://prntscr.com/7aj50
    Панелька слева чуток показывается и всё.

    1. Спасибо, исправил.

  2. 22 марта 2012 г. в 22:24

    Вариант с кнопкой на верх как здесь http://studio-gost.ru/knopka-naverx-s-plavnoj-prokrutkoj/ лучше и практичнее кнопка всегда под рукой, а не только в самом низу.

  3. gordi
    23 марта 2012 г. в 21:16

    На мой взгляд, недостатком является использование тега «a».

    Понятно, что его наличие продиктовано работоспособностью предлагаемого при отключенном JS,
    но href=”#” с точки зрения поисковиков является битой ссылкой, что не приятно само по себе :)

    1. 23 марта 2012 г. в 21:51 / ответ на коммент gordi

      Вместо href="#" можно сделать href="#wrapper", где wrapper – самый верхний идентификатор, если, конечно же, он имеется. В этом случае все будет по правилам.

      1. gordi
        23 марта 2012 г. в 21:56 / ответ на коммент Dimox

        Можно :)
        Но лучше, вообще обойтись без тега “а”, забив на отключенный JS.

        1. 28 марта 2012 г. в 06:22 / ответ на коммент gordi

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

          1. gordi
            28 марта 2012 г. в 12:25 / ответ на коммент RAD

            Это, как посмотреть :)
            Самый лучший вариант – кнопка “Home” на клаве, работает всегда :)

            1. Не всегда. При нажатой кнопке NumLk не работает. Приходится каждый раз отключать эту кнопку. А мне она нужна, т.к. я часто работаю с цифрами в правой панели клавиатуры.
              Я когда плагин для поднятия вверх установила и пост написала, так тоже с этими кнопками Home&End советчиков было предостаточно. У меня и на самом сайте кнопка стоит, и браузере Хром тоже поставила. Очень удобно. И ничего каждый раз переключать не надо.
              А код всяко лучше плагина, т.к. меньше нагрузка. Так что спасибо за код.

              1. «NumLock» влияет только на правую панель с цифрами, теоретически он не может оказывать никакого влияния на кнопку «Home».
                Хотя в принципе возможен и такой вариант, но только если у вас урезанный вариант клавиатуры без отдельной зоны с кнопками «Ins», «Del», «Home» и прочими.

            2. 28 марта 2012 г. в 21:27 / ответ на коммент gordi

              И всё же я не понял, чем именно лучше вариант без использования тега «a», он как минимум семантичен.

              1. gordi
                29 марта 2012 г. в 00:32 / ответ на коммент RAD

                Комментарий № 14

                1. 29 марта 2012 г. в 01:02 / ответ на коммент gordi

                  Комментарий №15

                  href=”#wrapper”

                  — это обычная ссылка на якорь.

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

                  1. gordi
                    29 марта 2012 г. в 13:25 / ответ на коммент RAD

                    Посмотрите два примера:
                    1. http://webpractica.ru/i/javascript/scrolltop1.html
                    этот с JS и href=”#wrapper” итого, чтобы получиь “гламур” по другому назвть полученное не могу, нужен скрипт из 8 строк плюс соответствующий код для меток-якорей.
                    2. http://webpractica.ru/i/javascript/scrolltop2.html
                    JS удален, имитируем работу без него, что видим?
                    Клик по “Вернуться к началу страницы” помимо возвращения туда, куда надо даписывает #wrapper в URL страницы.
                    Итак, одна страница имеет два адреса, что вряд ли понравится поисковикам :)

                    Так что лучше, мнимая семантика или респект поисковиков?

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

                    Следовательно, вариант замены тега “a” на нейтральный тег “span” с моей точки зрения более правильный и простой, у вас может быть другое мнение на этот счет :)

                    1. 29 марта 2012 г. в 13:51 / ответ на коммент gordi

                      Глупый спор. Лучше будет тот вариант, которые наиболее удобен владельцу сайта.

                      1. gordi
                        29 марта 2012 г. в 14:44 / ответ на коммент Dimox

                        Варианты, варианты …
                        В этом, что-то есть :)

                    2. 29 марта 2012 г. в 14:17 / ответ на коммент gordi

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

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

                      1. gordi
                        29 марта 2012 г. в 14:49 / ответ на коммент art

                        Для посетителя и поисковика, все должно быть однозначно,
                        одна страница и один URL к ней :)

                    3. 29 марта 2012 г. в 14:48 / ответ на коммент gordi

                      Спасибо, вашу точку зрения понял.

            3. 14 января 2018 г. в 23:17 / ответ на коммент gordi

              На Маке нет кнопки такой, бро)

  4. gordi
    24 марта 2012 г. в 17:58

    Без тега

    а

    , поменял его на

    span

    , скрипт без изменений.
    http://webpractica.ru/i/javascript/scrolltop.html
    Понятно, что при отключенном JS не работает :)

  5. gocreg
    28 марта 2012 г. в 23:08

    У меня в конце страницы ссылка на скрытый блок div, при клике по ссылке повесил действие – (slideDown), блок раскрывается, но при этом, чтобы его увидеть нужно прокрутить страницу вниз на высоту этого блока , вопрос – как сделать, чтобы вместе с открытием блока, страница прокручивалась бы вниз до нижней границы раскрывающегося блока?

  6. EGORR
    29 марта 2012 г. в 10:01

    Однажды Alex Shuyskiy написал подобную штуку а я оформил в jQuery plugin. Кому любопытно, – милости прошу: shublog.ru

  7. 30 марта 2012 г. в 13:42

    Спасибо! Как раз искал такой скрипт.

  8. Нио
    1 апреля 2012 г. в 17:56

    возможно это как доп функционла для share42
    учитывая, что панель с соц иконками плавающая и заплывает вниз, возможно имеет смысл к ней добавлять такую кнопку возврата наверх, только нужно, чтобы визуально – для пользователя две панели выглядели раздельно, а объединялись только логически (кодом и версткой) – для вебмастера.

    1. 1 апреля 2012 г. в 18:43 / ответ на коммент Нио

      Такая кнопка уже есть в share42. А раздельных панелей не будет.

      1. Нио
        2 апреля 2012 г. в 21:50 / ответ на коммент Dimox

        Честно говоря, без вашей подсказки я бы не определил, что в этом блоге есть кнопка такой перемотки)) Человек склонен искать привычные вещи на привычных местах и искать другой функционал в панели кнопок соцсетей для меня непривычно. Мой пример не показателен.

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

        1. 3 апреля 2012 г. в 09:19 / ответ на коммент Нио

          Человек склонен искать привычные вещи на привычных местах и искать другой функционал в панели кнопок соцсетей для меня непривычно.

          Согласен. Она там совсем не к месту.

          1. 7 сентября 2012 г. в 22:43 / ответ на коммент Dimox

            Я думал скрипт не пашет. Ждал пока сбоку кнопка появиться ))))

  9. brbt
    14 апреля 2012 г. в 01:25

    Будьте любезны, как сделать прокрутку до самого низа страницы?
    JS не знаю и сам разобраться не смог.

    1. 14 апреля 2012 г. в 11:40 / ответ на коммент brbt

      Вот пример – http://jsfiddle.net/Dimox/XqsrS/

      1. brbt
        14 апреля 2012 г. в 16:40 / ответ на коммент Dimox

        Благодарю!

  10. 14 августа 2012 г. в 15:31

    Спасибо вам огромное. Первый скрипт помог!
    Второй, бесспорно, тоже работает, но у меня толи страница коротка, толи просто браузер тупит, но все не красиво и вовсе не плавно…

  11. Дмитрий
    9 ноября 2012 г. в 23:43

    Оба примера отличные!!!
    Спасибо за совет!!!
    Не знал как вставить прокрутку на чистый HTML без плагинов.
    А тут и JS и JQuery помогли!!!

  12. Dmitriy
    21 ноября 2012 г. в 15:06

    А возможно также в скрипт (первый вариант – на JS только) добавить, чтобы когда юзер на самом верху – то кнопка не отображается – как только начал опускаться по стрпнице то она отображалась?

    1. 21 ноября 2012 г. в 15:22 / ответ на коммент Dmitriy

      Скорее всего, можно, но я не знаю, как.

  13. 22 февраля 2013 г. в 13:31

    Dimox Привет! а как сделать прокурутку вниз для блога,если например комментариев полно :)

    1. 22 февраля 2013 г. в 13:40 / ответ на коммент allemiko

      В скрипте на jQuery поменяй строку:

      $('body,html').animate({scrollTop:0},500);

      на такую:

      $('body,html').animate({scrollTop: $('body').height()},500);
      1. 22 февраля 2013 г. в 13:48 / ответ на коммент Dimox

        Cпасибо большое :)) Вы мастер, во намучался же.

  14. anon
    24 апреля 2013 г. в 18:19
    	function up() {
    		var top = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
    	  if(top > 0) {
    		window.scrollBy(0,((top+100)/-10));
    		t = setTimeout('up()',20);
    	  } else clearTimeout(t);
    	  return false;
    	}

    Так намного лучше – при приближении к вершине документа скроллинг замедляется.

  15. 2 апреля 2015 г. в 09:10

    Спасибо, заврианто на JS забрал в свой фреймворк! Пиши еще на JS … Нафиг тебе эта рыбалка? :D

  16. 3 сентября 2015 г. в 13:24

    Я не парился и прикрутил все на чистом HTML. Правда все время висит)))

  17. punker
    14 июля 2017 г. в 00:34

    Прокрутка сверху вниз:

    var t;
    function up() {
    if((window.innerHeight + window.pageYOffset) < document.documentElement.scrollHeight) { window.scrollBy(0,1); t = setTimeout('up()',20);} else clearTimeout(t); return false;

    1. Pashtet
      18 февраля 2023 г. в 20:54 / ответ на коммент punker

      Брат а как сделать чтобы скролл вниз был и быстро?

  18. Антон
    9 февраля 2019 г. в 22:27

    А как сделать скрол, который при первом нажатии на ссылку поднимался бы вверх, а при втором нажатии опускался бы вниз и так постоянно, раз вверх, раз в них?

  19. Аноним
    6 октября 2020 г. в 08:17

    Вариант jQuery норм работает, спасибо!

  20. 25 января 2021 г. в 11:32

    Спасибо огромнейшее!!! У меня просто нет слов благодарности.

Ваш комментарий

Жирный текст

Ссылка

Цитата

Внутристрочный код

CSS-код

HTML-код

JavaScript-код

PHP-код