Верх страницы
Обложка к записи jQuery сниппеты: плавная прокрутка страниц
Время для прочтения: 0 мин. 2 сек.

jQuery сниппеты: плавная прокрутка страниц

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

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

:
...
<body id="top" name="top">
...
</body>
...

Создаём ссылку, при нажатии на которую будет осуществлён переход к нашей метке (тегу <body>) и добавим соответствующий класс:

<a href="#top" class="scrollto">Наверх страницы ↑</a>

Теперь пишем небольшой сниппет на jQuery и наслаждаемся результатом:

jQuery(document).ready(function() {
	jQuery("a.scrollto").click(function () {
		elementClick = jQuery(this).attr("href")
		destination = jQuery(elementClick).offset().top;
		jQuery("html:not(:animated),body:not(:animated)").animate({scrollTop: destination}, 1100);
		return false;
	});
});

Допилил немного: обернул все в bind, убрал проверку анимации, заменив ее на отключение оной (метод stop)

Теперь ссылка выглядит просто:

<a href="#top">Наверх страницы ↑</a>

и соответствующий JavaScript:

$("a[href*=#]:not([href=#])").bind('click', function (event) {
	var thisHash = this.hash;
	var targetOffset = $(thisHash).offset().top;
	$("html,body").stop().animate({ 
		scrollTop: targetOffset
	}, 1100 );
	location.hash = thisHash;
	event.preventDefault();
});

Реализацию данного метода вы можете наблюдать на этом блоге — прокрутите страницу вниз

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

24 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Роман
13 лет назад

Здравствуйте. Пытался вставить Ваш скрипт, но что-то не получается… Может распишете чуть-чуть подробнее для ламера???

Антон
Антон
13 лет назад

ужас какой, посмотрите в опере 10.52

AlexSol
13 лет назад

А зачем проверять :animated? Если по ссылке нажали, то нужно выполнить действие. Решение

$("html,body")stop().animate({ scrollTop: targetOffset}, 1100 );

удачнее — http://jquerylist.ru/snippets/smooth-scrolling.html

qwer
qwer
12 лет назад
Ответить на  AlexSol

спасибо большое!

Роман Лоевский
13 лет назад

А не пробовали сделать автоматическое появления надписи «Наверх» при прокрутке вниз, и исчезание, когда страница снова прокручена максимум наверх? И как дела с кроссбраузерностью. Не могу найти ни один нормальный кроссбраузерный скрипт…

Слава
Слава
13 лет назад

Прокрутка работает только вверх? или вниз тоже будет работать?

Ека
Ека
13 лет назад

Добрый день.

А если вместо :

<a href="#top" rel="nofollow">Наверх</a>

написано:

<a href="/contents/page/#top" class="scrollto" rel="nofollow">Наверх </a>

сниппет изменится?

Максим
Максим
12 лет назад

А как быть если скролл производится по внешней ссылке до якоря на странице. Например я добавил сообщение и меня перемотало на место где оно добавлено на новой странице(ссылка вида http://mypage.ru/index.php#myanchor_xx).

Максим
Максим
12 лет назад
Ответить на  Кобзарёв Михаил

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

Максим
Максим
12 лет назад
Ответить на  Максим

Решил, но коряво:
scroll(0,0);//чтобы отмотать к 0,0 потому как браузер уже перепругнл на ссылку

var anch=location.href;
anch=anch.substring(anch.indexOf(‘#’)+1);
if (anch!=»){
anchDist=$(«a[name=»+anch+»]:first»).offset().top;
$(«html, body»).stop().animate({scrollTop: anchDist-150}, 1100 );
}

Макс Уякс
12 лет назад

А как сделать плавную прокрутку вниз к якорю?

Никита
12 лет назад

Поставить якорь внизу 🙂

Дмитрий
Дмитрий
12 лет назад

А как можно спустится вниз?

Виталий
Виталий
12 лет назад

Второй способ так и не сработал, зато первый работает на ура. Еще бы разобрать что там к чему.

Виталий Полковников

Внедрил у себя. Спасибо.

Предыдущая запись
Следующая запись

Давайте дружить
в Телеграме

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы