Я хочу плавно прокрутить вниз. Я не хочу писать для этого функцию, особенно если она есть в jQuery.
javascript
jquery
Брайан Филд
источник
источник
html
и другоеbody
? Здесь есть некоторая идея: stackoverflow.com/questions/2123690/… , но это не полный ответ.<html>
естьoverflow-x:hidden;
это одушевленные не будет работать. (Может не работатьoverflow-y:hidden
, иoverflow:hidden
, но я не проверял.body
работал в Chrome в начале этого года, но теперь это должно бытьhtml
.Ответ Ника прекрасно работает. Будьте осторожны при указании функции complete () внутри вызова animate (), поскольку он будет выполнен дважды, поскольку у вас объявлены два селектора (html и body).
Вот как вы можете избежать двойного обратного вызова.
источник
die()
функцию передlive()
вызовом функции. Это гарантирует, что вашlive()
обработчик будет вызван только один раз.Ответ Ника отлично работает, а настройки по умолчанию хороши, но вы можете более полно контролировать прокрутку, выполнив все дополнительные настройки.
вот как это выглядит в API:
так что вы можете сделать что-то вроде этого:
Вот страница API функции jQuery .animate: http://api.jquery.com/animate/
источник
Как упоминал Кит, существует проблема с несколькими обратными вызовами, запускаемыми, когда вы анимируете как 'html', так и 'body'. Вместо того, чтобы анимировать и блокировать последующие обратные вызовы, я предпочитаю использовать некоторые базовые функции обнаружения и анимировать только свойство scrollTop одного объекта.
Принятый ответ в этом другом потоке дает некоторое представление о том, какое свойство scrollTop объекта мы должны попытаться анимировать: прокрутка и анимация pageYOffset в IE8
ОБНОВИТЬ - - -
Вышеуказанная попытка обнаружения функции не удалась. Похоже, что не существует однострочного способа сделать это, так как свойство pageYOffset в браузерах с типом webkit всегда возвращает ноль при наличии типа документа. Вместо этого я нашел способ использовать обещание для выполнения одного обратного вызова при каждом выполнении анимации.
источник
У меня есть то, что я считаю, лучшее решение, чем
$('html, body')
взломать.Это не одна строка, но проблема, с которой я столкнулся,
$('html, body')
заключается в том,$(window).scrollTop()
в во время анимации, вы увидите, что значение скачет повсюду, иногда на сотни пикселей (хотя я не вижу ничего подобного происходит визуально). Мне нужно было, чтобы значение было предсказуемым, чтобы я мог отменить анимацию, если пользователь нажал полосу прокрутки или повернул колесо мыши во время автопрокрутки.Вот эта функция будет плавно анимировать прокрутку:
Ниже приведена более сложная версия, которая будет отменять анимацию при взаимодействии с пользователем, а также переопределение до достижения целевого значения, что полезно при попытке мгновенно установить scrollTop (например, при простом вызове
$(window).scrollTop(1000)
- по моему опыту это не помогает 50% времени.)источник
У меня были проблемы, когда анимация всегда начиналась сверху страницы после обновления страницы в других примерах.
Я исправил это, не анимируя CSS напрямую, а вызывая
window.scrollTo();
каждый шаг:Это также получает вокруг
html
противbody
вопроса , как он использует кросс-браузер JavaScript.Загляните на http://james.padolsey.com/javascript/fun-with-jquerys-animate/ для получения дополнительной информации о том, что вы можете сделать с помощью функции анимирования jQuery.
источник
Вы можете использовать анимацию jQuery для прокрутки страницы с определенной продолжительностью:
где 1024px - смещение прокрутки, а 5000 - продолжительность анимации в миллисекундах.
источник
$("html, body").animate({scrollTop: 1024}, 5000);
тоже работает.Попробуйте плагин scrollTo .
источник
источник
Если вы хотите перейти вниз в конце страницы (поэтому вам не нужно прокручивать страницу вниз), вы можете использовать:
источник
Но если вы действительно хотите добавить анимацию во время прокрутки, вы можете попробовать мой простой плагин ( AnimateScroll ), который в настоящее время поддерживает более 30 стилей смягчения.
источник
кросс-браузерный код:
это без анимации, но работает везде
источник