У меня есть этот input
элемент:
<input type="text" class="textfield" value="" id="subject" name="subject">
Затем у меня есть некоторые другие элементы, такие как другие текстовые вводы, текстовые области и т. Д.
Когда пользователь нажимает на том , что input
с #subject
, страница должна прокручивать до последнего элемента страницы с хорошей анимацией. Это должна быть прокрутка вниз, а не вверх.
Последний элемент страницы - submit
кнопка с #submit
:
<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">
Анимация не должна быть слишком быстрой и плавной.
Я использую последнюю версию JQuery. Я предпочитаю не устанавливать плагин, а использовать для этого функции jQuery по умолчанию.
javascript
jquery
scroll
DiegoP.
источник
источник
scrollTo
был отключен для меня из-за хромированного плагина, не уверен, какой.Ответы:
Предполагая, что у вас есть кнопка с идентификатором
button
, попробуйте этот пример:Я получил код из статьи. Плавно выделите элемент без плагина jQuery . И я проверил это на примере ниже.
источник
.scrollTop(…)
вместо.animate({scrollTop: …}, …)
.jQuery .scrollTo (): View - Демо, API, Источник
Я написал этот легкий плагин, чтобы сделать прокрутку страниц / элементов намного проще. Это гибко, когда вы можете передать целевой элемент или указанное значение. Возможно, это может быть частью следующего официального релиза jQuery, как вы думаете?
Примеры использования:
Опции:
scrollTarget : элемент, строка или число, указывающее желаемую позицию прокрутки.
offsetTop : число, определяющее дополнительный интервал над целью прокрутки.
длительность : строка или число, определяющее, как долго будет выполняться анимация.
easing : строка, указывающая, какую функцию замедления использовать для перехода.
complete : функция для вызова после завершения анимации.
источник
Если вы не очень заинтересованы в эффекте плавной прокрутки и просто интересуетесь прокруткой до определенного элемента, вам не требуется какая-либо функция jQuery для этого. Javascript раскрыл ваше дело:
https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView
Так что все, что вам нужно сделать, это:
$("selector").get(0).scrollIntoView();
.get(0)
используется, потому что мы хотим получить элемент DOM JavaScript, а не элемент DOM JQuery.источник
$(selector)[0]
?document.getElementById('#elementID').scrollIntoView()
. Не нужно загружать библиотеку ~ 100 Кб, просто чтобы выбрать элемент и затем преобразовать его в обычный JavaScript.document.getElementById('elementID').scrollIntoView()
Используя этот простой скрипт
Сделал бы в виде сортировки, что если в URL найден хеш-тег, scrollTo анимирует идентификатор. Если не найден хеш-тег, игнорируйте скрипт.
источник
$(window.location.hash)
не будет работать для хэшей, которые не отвечают определению регулярных выражений в jQuery. Например, хэши, содержащие числа. Это также немного опасно; формат ввода должен быть проверен, чтобы вы не выбрали другой элемент.источник
jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });
Решение от Стива и Питера работает очень хорошо.
Но в некоторых случаях вам может потребоваться преобразовать значение в целое число. Странно, но возвращаемое значение из
$("...").offset().top
иногда вfloat
.Использование:
parseInt($("....").offset().top)
Например:
источник
Компактная версия «одушевленного» решения.
Основное использование:
$('#your_element').scrollTo();
источник
Это способ, которым я делаю это.
Работает в любом браузере.
Это можно легко обернуть в функцию
Вот рабочий пример
Документы
источник
Я знаю способ без JQuery:
Изменить: Прошло два года, и я до сих пор случайно получить репутацию из этого поста lmao
источник
Если вы обрабатываете только прокрутку до элемента ввода, вы можете использовать
focus()
. Например, если вы хотите прокрутить до первого видимого ввода:Или первый видимый ввод в контейнере с классом
.error
:Спасибо Трише Болл за указание на это!
источник
С этим решением вам не нужны никакие плагины и не требуется никаких настроек, кроме размещения скрипта перед закрывающим
</body>
тегом.При загрузке, если в адресе есть хеш, мы переходим к нему.
И - всякий раз, когда вы нажимаете на
a
ссылку сhref
хешем, например#top
, мы переходим к ней.источник
> 1
вместо0
, просто потому, что/#
этот сценарий ломаетсяreturn false;
конце события on click вам необходимо предотвратить действие по умолчанию - немедленную прокрутку до якоря -.e.preventDefault();
e.preventDefault()
однако не обновляет хэш в URL при нажатии, это всегда URL без хешаВ большинстве случаев лучше всего использовать плагин. Шутки в сторону. Я собираюсь рекламировать свою здесь . Конечно, есть и другие. Но, пожалуйста, проверьте, действительно ли они избегают ловушек, для которых вы хотите плагин, в первую очередь - не все они делают.
Я написал о причинах использования плагина в другом месте . В двух словах, один вкладыш подкрепляет большинство ответов здесь
плох UX.
Анимация не реагирует на действия пользователя. Это продолжается, даже если пользователь щелкает, касается или пытается прокрутить.
Если начальная точка анимации близка к целевому элементу, анимация мучительно медленная.
Если целевой элемент расположен в нижней части страницы, его нельзя прокрутить до верхней части окна. Анимация прокрутки внезапно останавливается в середине движения.
Для решения этих проблем (и многих других ) вы можете использовать мой плагин, jQuery.scrollable . Звонок становится
и это все. Конечно, есть и другие варианты .
Что касается целевой позиции,
$target.offset().top
выполняет работу в большинстве случаев. Но учтите, что возвращаемое значение не учитывает границыhtml
элемента ( см. Эту демонстрацию ). Если вам нужно, чтобы целевая позиция была точной при любых обстоятельствах, лучше использоватьЭто работает, даже если граница
html
элемента установлена.источник
Анимации:
источник
Если вы хотите прокрутить содержимое контейнера переполнения (вместо
$('html, body')
ответа выше), работая также с абсолютным позиционированием, это можно сделать следующим образом:источник
Простой способ добиться прокрутки страницы до цели div id
источник
Это мой подход к абстракции идентификаторов и ссылок с использованием универсального селектора классов
источник
Очень простой и удобный пользовательский плагин jQuery. Просто добавьте атрибут
scroll=
к вашему интерактивному элементу и установите его значение для селектора, к которому вы хотите перейти.Как так:
<a scroll="#product">Click me</a>
. Может использоваться на любом элементе.источник
источник
$('html, body').animate(...)
не для меня на iphone, Android-браузер Chrome Safari.Мне пришлось настроить таргетинг на корневой элемент содержимого страницы.
Вот что я закончил
Все содержимое тела связано с #content div
источник
Это ответ Атхарвы с: https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView . Просто хотел добавить, если ваш документ находится в iframe, вы можете выбрать элемент в родительском фрейме для прокрутки в представлении:
источник
источник
Это будет сначала прокрутить вниз до
#submit
затем восстанавливать курсор к тому вводу, по которому щелкнули, который имитирует прокрутку вниз и работает в большинстве браузеров. Он также не требует jQuery, так как он может быть написан на чистом JavaScript.Может ли этот способ использовать
focus
функцию, имитирующую анимацию лучше, через цепочкуfocus
вызовов. Я не проверял эту теорию, но это выглядело бы примерно так:источник
Я настроил модуль scroll-element
npm install scroll-element
. Это работает так:Написано с помощью следующих SO сообщений:
Смещение-топ-ан-элемента-без-JQuery
scrolltop-анимация-без JQuery
Вот код:
источник
Чтобы показать полный элемент (если это возможно с текущим размером окна):
источник
Я написал функцию общего назначения, которая прокручивает либо объект jQuery, селектор CSS, либо числовое значение.
Пример использования:
Код функции:
источник
Для чего это стоит, вот как мне удалось добиться такого поведения для общего элемента, который может быть внутри DIV с прокруткой. В нашем случае мы прокручиваем не полное тело, а только отдельные элементы с переполнением: auto; в более крупном плане.
Он создает ложный ввод высоты целевого элемента, а затем помещает на него фокус, и браузер позаботится об остальном, независимо от того, насколько глубоко вы находитесь внутри прокручиваемой иерархии. Работает как шарм.
источник
Это сработало для меня:
источник
источник
ОДИН ЛАЙНЕР
Показать фрагмент кода
источник
Обновленный ответ с 2019 года:
источник