У меня есть плавное решение двумя способами: плавная прокрутка и плавная кнопка.
С отключенным JavaScript, это просто ссылка внизу страницы на якорь top
.
(#
, поскольку href может быть довольно нестабильным.)
С включенным JavaScript:
- Скрыть div, содержащий ссылку (чтобы избежать мерцания).
- Исправьте положение div у нижней правой границы окна.
- Удалите атрибут
href
и добавьте обработчик click
для плавной прокрутки.
(сохраняет URL и историю браузера аккуратными, и мне не нужно return
или preventDefault
в функции прокрутки)
- Исчезает деление входа / выхода в зависимости от положения прокрутки:
Отображать ссылку, только если позиция прокрутки> высота окна.
- Обновить позицию при изменении размера.
HTML
<body>
<a name="top"></a>
...
<div id="scrolltotop" style="display:block;text-align:right">
<a href="#top" title="scroll to top"><img src="scrolltotop.png" alt="scroll to top"></a>
</div>
</body>
JQuery
function scrolltotop_display()
{
var el=$('#scrolltotop');
if((window.pageYOffset||document.documentElement.scrollTop)>window.innerHeight)
{ if(!el.is(':visible')) { el.stop(true, true).fadeIn(); } }
else { if(!el.is(':animated')) { el.stop(true, true).fadeOut(); }}
}
function scrolltotop_position()
{
var el=$('#scrolltotop');
el.css('top', window.innerHeight-100);
el.css('left', window.innerWidth-100);
scrolltotop_display();
}
$(window).on('load', function(){
$('#scrolltotop').css('display', 'none');
$('#scrollToTop').css('position', 'fixed');
scrolltotop_position();
$('#scrollToTop a').removeAttr('href');
$('#scrollToTop a').on('click', function(){$('html, body').animate({scrollTop:0}, 500);});
});
$(window).on('scroll', scrolltotop_display);
$(window).on('resize', scrolltotop_position);