A lot из пользователи рекомендуют выбирать теги html и body для совместимости с различными браузерами, например:
$('html, body').animate({ scrollTop: 0 }, callback);
Это может сбить вас с толку, хотя, если вы рассчитываете, что ваш обратный вызов выполняется только один раз. Фактически он будет запущен дважды, потому что вы выбрали два элемента.
Если это проблема для вас, вы можете сделать что-то вроде этого:
function scrollToTop(callback) {
if ($('html').scrollTop()) {
$('html').animate({ scrollTop: 0 }, callback);
return;
}
$('body').animate({ scrollTop: 0 }, callback);
}
Причина, по которой это работает, в Chrome $('html').scrollTop()
возвращает 0, но не в других браузерах, таких как Firefox.
Если вы не хотите ждать завершения анимации в случае, если полоса прокрутки уже находится вверху, попробуйте следующее:
function scrollToTop(callback) {
if ($('html').scrollTop()) {
$('html').animate({ scrollTop: 0 }, callback);
return;
}
if ($('body').scrollTop()) {
$('body').animate({ scrollTop: 0 }, callback);
return;
}
callback();
}