@Tenebrius

Как сделать скроллинг плавным?

Есть сайт-одностаничник. На нем меню с переходами к якорям. Захотелось приукрасить, чтобы переход был анимированным, а не мгновенным.

Использовал в скрипте такой код:

var destination = Math.round($("a[name='"+str+"']").offset().top)-50;
$('html, body').animate({ scrollTop: destination }, 500);


Анимация-то появилась. Но она какая-то дерганная. С задержками и подтормаживаниями.

Таким образом у меня два вопроса.

Почему анимация тормозит? (Вполне допускаю, что из-за моей криворукости, но все же не понятно)
Как сделать плавную анимацию перехода?

Если это можно сделать на чистом JS - вообще отлично.

P.S. Я видел подобные вопросы, но ответов на свои не нашел.
  • Вопрос задан
  • 2596 просмотров
Пригласить эксперта
Ответы на вопрос 4
Советую использовать jquery.scrollTo вместо своих велосипедов.
Ответ написан
Symphony
@Symphony Куратор тега JavaScript
перед энимэйт поставьте stop()
$('html, body').stop().animate({ scrollTop: destination }, 500);
Ответ написан
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Зачем вы крутите оба элемента? По-хорошему нужно только в корневом:
$(document.documentElement).animate({ scrollTop: destination }, 500);


Но в режиме Quirks Mode в обычных браузерах и в webkit всегда нужно крутить body:
$(document.body).animate({ scrollTop: destination }, 500);


Обращаться к элементам именно так, а не указывать для парсинга имя тэга.
В итоге примерно так:
var element = 'WebkitAppearance' in document.documentElement.style || document.compatMode == 'BackCompat' ? document.body : document.documentElement;
$(element).animate({ scrollTop: destination }, 500);
Ответ написан
@rinatoptimus
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы