У меня есть пара гиперссылок на моей странице. Часто задаваемые вопросы, которые пользователи прочтут, посетив мой раздел справки.
Используя ссылки привязки, я могу сделать прокрутку страницы в направлении привязки и направлять туда пользователей.
Есть ли способ сделать эту прокрутку плавной?
Но обратите внимание, что он использует собственную библиотеку JavaScript. Может быть, jQuery предлагает что-то подобное в выпечке?
Ответы:
Обновление от апреля 2018 года: теперь есть родной способ сделать это :
В настоящее время это поддерживается только в самых передовых браузерах.
Для поддержки старых браузеров вы можете использовать эту технику jQuery:
А вот и скрипка: http://jsfiddle.net/9SDLw/
Если у вашего целевого элемента нет идентификатора, и вы ссылаетесь на него по его имени
name
, используйте это:Для повышения производительности вы должны кэшировать этот
$('html, body')
селектор, чтобы он не запускался каждый раз при нажатии на привязку:Если вы хотите, чтобы URL был обновлен, сделайте это в
animate
обратном вызове:источник
scrollTop: $(this.hash).offset().top
вместоscrollTop: $(this.href).offset().top
?scrollTop: $(href).offset().top - 72
html, body
объекта здесь не нужно, запуск селектора один раз за клик - это не так уж и много.Правильный синтаксис:
Упрощение : СУХОЙ
Объяснение
href*=\\#
:*
означает, что это соответствует тому, что содержит#
символ. Таким образом, только соответствуют якорям . Подробнее о значении этого см. Здесь\\
потому что#
это специальный символ в css-селекторе, поэтому мы должны его избежать.источник
$('a')
чтобы$('a[href*=#]')
обслуживать только URL-адреса якорей<a href="javascript:$('#test').css('background-color', '#000')">Test</a>
. Вы должны использовать$('a[href^=#]')
для сопоставления всех URL, которые начинаются с символа хеша.a[href^=\\#]
Новая горячность в CSS3. Это намного проще, чем любой метод, перечисленный на этой странице, и не требует Javascript. Просто введите приведенный ниже код в css, и все внезапные ссылки на места внутри вашей страницы будут иметь плавную прокрутку.
После этого любые ссылки, указывающие на div, будут плавно переходить в эти разделы.
Изменить: Для тех, кто запутался в вышеупомянутом теге. По сути это ссылка, которая кликабельна. Затем вы можете иметь другой тег div где-нибудь на вашей веб-странице, например
В связи с этим ссылка будет кликабельной и перейдет в любой раздел #sese, в данном случае это наш div, который мы назвали section.
Кстати, я часами пытался заставить это работать. Нашел решение в каком-то непонятном разделе комментариев. Он был глючным и не работал в некоторых тегах. Не работал в теле. Наконец-то это сработало, когда я поместил его в html {} в файле CSS.
источник
это сработало идеально для меня
источник
Я удивлен, что никто не опубликовал собственное решение, которое также заботится об обновлении хеша браузера, чтобы он соответствовал. Вот:
Смотрите учебное пособие: http://www.javascriptkit.com/javatutors/scrolling-html-bookmark-javascript.shtml
Для сайтов с липкими заголовками
scroll-padding-top
CSS может использоваться для обеспечения смещения.источник
Только CSS
Все, что вам нужно добавить только это. Теперь ваша прокрутка внутренних ссылок будет плавной, как поток.
Примечание . Все последние браузеры (
Opera
,Chrome
иFirefox
т. Д.) Поддерживают эту функцию.для подробного понимания прочитайте эту статью
источник
Я предлагаю вам сделать этот общий код:
Вы можете увидеть очень хорошую статью здесь: jquery-effet-smooth-scroll-defilement-fluide
источник
Официальный: http://css-tricks.com/snippets/jquery/smooth-scrolling/
источник
Здесь уже есть много хороших ответов - однако все они упускают тот факт, что пустые якоря должны быть исключены . В противном случае эти скрипты генерируют ошибки JavaScript, как только щелкает пустой якорь.
На мой взгляд, правильный ответ таков:
источник
Использование JQuery:
источник
Существует встроенная поддержка плавной прокрутки для прокрутки хеш-идентификаторов.
Вы можете посмотреть: https://www.w3schools.com/howto/howto_css_smooth_scroll.asp#section2
источник
Данный ответ работает, но отключает исходящие ссылки. Ниже версия с добавленным бонусом ослабляет (качается) и учитывает исходящие ссылки.
источник
stop()
однако крошка URL не работает должным образом: кнопка «Назад» не возвращает обратно, это потому, что когда крошка установлена в URL после завершения анимации. Лучше без крошки в URL, например, так делает airbnb.HTML
или с абсолютным полным URL
JQuery
источник
Современные браузеры немного быстрее в наши дни. SetInterval может работать. Эта функция хорошо работает в Chrome и Firefox в наши дни (немного медленнее в сафари, не беспокоился о IE)
источник
Существует CSS способ сделать это с помощью scroll-поведения. Добавьте следующее свойство.
И это все. JS не требуется.
PS: пожалуйста, проверьте совместимость браузера.
источник
Добавление этого:
как-то сводит на нет вертикальное смещение
в Firefox и IE, но не в Chrome. По сути, страница плавно прокручивается до точки, в которой она должна остановиться, основываясь на смещении, но затем переходит вниз к тому месту, где страница будет перемещаться без смещения.
Он добавляет хеш в конец URL, но нажатие назад не возвращает вас к вершине, он просто удаляет хеш из URL и оставляет окно просмотра там, где оно находится.
Вот полный JS, который я использую:
источник
Это решение также будет работать для следующих URL-адресов без разрыва ссылок на разные страницы.
и т.п.
Я еще не проверял это во всех браузерах.
источник
Это позволит jQuery различать целевой хеш и знать, когда и где остановиться.
источник
источник
Протестированный и проверенный код
источник
Я сделал это для якорей "/ xxxxx # asdf" и "#asdf"
источник
Вот решение, которое я реализовал для нескольких ссылок и якорей, для плавной прокрутки:
http://www.adriantomic.se/development/jquery-localscroll-tutorial/, если ваши навигационные ссылки настроены в div навигации и объявлены с этой структурой:
и ваши соответствующие пункты назначения тега привязки как так:
Затем просто загрузите это в заголовок документа:
Благодаря @Adriantomic
источник
Если у вас есть простая кнопка на странице для прокрутки вниз до элемента div и вы хотите, чтобы кнопка «назад» работала, переходя наверх, просто добавьте этот код:
Это может быть расширено для перехода к различным элементам div, читая значение хеша и прокручивая, как ответ Джозефа Силберса.
источник
Никогда не забывайте, что функция offset () задает позицию вашего элемента в документе. Поэтому, когда вам нужно прокрутить свой элемент относительно его родителя, вы должны использовать это;
Ключевым моментом является получение scrollTop из scroll-div и добавление его в scrollTop. Если вы этого не сделаете, функция position () всегда выдает разные значения позиции.
источник
Вы можете использовать
window.scroll()
сbehavior: smooth
иtop
установить верхнюю позицию смещения тега привязки, которая гарантирует, что тег привязки будет в верхней части области просмотра.Демо-версия:
Показать фрагмент кода
Вы можете просто установить свойство CSS
scroll-behavior
кsmooth
(который большинство современных браузеров поддержки) , который устраняет необходимость в Javascript.Показать фрагмент кода
источник
спасибо, что поделился, Джозеф Силбер. Вот ваше решение 2018 как ES6 с небольшим изменением для поддержания стандартного поведения (прокрутите вверх):
источник
Требуется jquery и анимация для привязки тега с указанным именем вместо id, при добавлении хеша в URL браузера. Также исправляет ошибку в большинстве ответов с jquery, где знак # не имеет префикс с обратной косой чертой. К сожалению, кнопка «Назад» не позволяет правильно вернуться к предыдущим хеш-ссылкам ...
источник