задний план
Недавно был разработан паблик-аккаунт компании H5, и сделана функция нажатия на иконку для прокрутки вверх. Функция реализации относительно проста, вызовите напрямую window.scrollTo(0, 0), и одна строка кода завершена. Но как у осадного льва, как я мог предъявлять к себе такие низкие требования, поэтому я добавил к себе требование для достиженияПлавная прокрутка вверхфункция. После расследования и просмотра документов есть три программы.
Используйте CSS
Чтобы достичь наивысшего уровня функциональности, просто используйте для этого CSS. код показывает, как показано ниже:
html {
scroll-behavior: smooth;
}
Роль этого стиля состоит в том, чтобы указать поведение прокрутки для элементов с полосами прокрутки, но он вступает в силу только тогда, когда пользователь выполняет навигацию вручную или когда API прокрутки CSSOM запускает прокрутку, и не влияет на прокрутку, вызванную поведением пользователя. Пока я праздновал, я открыл, можно ли использовать, и посмотрел на совместимость:
2. Используйте API-интерфейс Window.scrollTo
Все мы знаем window.scrollTo(x, y), который реализует функцию прокрутки до определенной позиции на странице путем передачи координат по осям x, y в документе. На самом деле, этот API также может передавать параметр, который является объектом, левое значение соответствует x в координатах, верхнее соответствует y в координатах, и есть значение поведения, которое позволяет вам настраиваем поведение прокрутки, а затем реализуем прокрутку таким образом.
window.scrollTo({
left: 0,
top: 0,
behavior: 'smooth'
})
Вкусно, приготовь. Через несколько дней ко мне пришел продакт-менеджер с 5-метровым ножом и сказал, что эффект прокрутки в Safari странный, а физический осмотр крайне плохой. Поэтому я молча открыл документ MDN и прокрутил вниз:
3. Используйте requestAnimationFrame
Я часто вижу знаменитый requestAnimationFrame, но у меня нет возможности его использовать.В этот раз я могу попробовать. Мы знаем, что роль requestAnimationFrame состоит в том, чтобы указать браузеру выполнить входящую функцию обратного вызова перед следующей перерисовкой.Это поведение автоматически выполняется браузером за вас. Итак, есть следующий код:
const scrollToTop = () => {
let sTop = document.documentElement.scrollTop || document.body.scrollTop
if (sTop > 0) {
window.requestAnimationFrame(scrollToTop)
window.scrollTo(0, sTop - sTop / 8)
}
}
Сделанный! ! ! Идеально! ! ! Несмотря на возбуждение, я все же открыл, могу ли я использовать его для проверки совместимости requestAnimationFrame: