Вставляем кнопку «наверх» на сайт
Рассмотрим простой способ создания кнопки «наверх» для сайта, которая будет появляться при прокрутке страницы вниз. Разберем возможность реализации на jquery и чистом javascript. Найдём причины, по которым она может не работать.
Порядок действий:
- подключить jQuery;
- загрузить на сайт изображение кнопки;
- добавить код, скрипт и стили.
Подключаем jQuery — прописываем загрузку последней версии библиотеки в секции «head» шаблона или где-то вверхней части сайта.
<script src="https://code.jquery.com/jquery-git.min.js"></script>
Выбираем подходящее изображение и загружаем его в каталог сайта. Предоставлю на выбор несколько вариантов. Скачать можно кликнув правой клавишей мышки по рисунку и нажав «Сохранить картинку как».
width: 100px; height: 40px; |
width: 74px; height: 94px; |
width: 60px; height: 60px; |
width: 67px; height: 80px; |
width: 63px; height: 61px; |
Вставляем html, скрипт и стиль.
<div id="upbutton"></div>
Код кнопки следует вставить в шаблон сайта. Например, перед закрывающимся тегом </body>
<script> $(window).on('scroll', function() { if ($(this).scrollTop() > 100)) { if ($('#upbutton').is(':hidden') { $('#upbutton').css({opacity : 1}).fadeIn('slow'); } } else { $('#upbutton').stop(true, false).fadeOut('fast'); } }); $('#upbutton').on('click', function() { $('html, body').stop().animate({scrollTop : 0}, 300); }); </script>
Скорость прокрутки можно регулировать, меняя в последней строке число «300».
<style> #upbutton { background: url("/images/up.png") no-repeat top left; height: 60px; width: 60px; bottom: 30px; right: 30px; cursor: pointer; display: none; position: fixed; z-index: 999; } </style>
В стилях незабываем указать свой путь к изображению, его ширину и высоту.
Кнопка на чистом JS
Плавающую кнопку «наверх» можно сделать и на чистом JavaScript. Всё аналогично предыдущему примеру, в том числе и стили. Меняется только html и скрипт. Библиотека jQuery не нужна.
HTML тег:
<a id="upbutton" href="#" onclick="smoothJumpUp(); return false;"> <img src="/images/up.png" alt="Top" border="none" title="Наверх"> </a>
JS скрипт:
<script> var smoothJumpUp = function() { if (document.body.scrollTop > 0 || document.documentElement.scrollTop > 0) { window.scrollBy(0,-50); setTimeout(smoothJumpUp, 10); } } window.onscroll = function() { var scrolled = window.pageYOffset || document.documentElement.scrollTop; if (scrolled > 100) { document.getElementById('upbutton').style.display = 'block'; } else { document.getElementById('upbutton').style.display = 'none'; } } </script>
Первая функция отвечает за автоматическое перемещение к началу страницы, а вторая — за показ и скрытие кнопки в зависимости от положения прокрутки.
Что делать, если кнопка не работает
Если кнопка не отображается, то измените в стилях свойство «display: none;» на «display: block;». Появилась?
- Нет. Значит проблема в неправильном пути к изображению или html тег размещён в неподходящем месте шаблона. Попробуйте разместить его перед закрывающимся тегом «body».
- Да. Значит дело в js скриптах. Следует проверить корректность подключения библиотеки jQuery (если применялся первый вариант). Всё в порядке? Тогда оберните скрипт в следующую конструкцию:
<script> window.onload = function () { //здесь скрипт } </script>
Конструкция выполняет скрипт после загрузки всей страницы.
Не помогло? Пиши в комментариях и постараемся найти проблему вместе.
https://gosstandart.info/ все руки не доходили. вот поставил. мило смотрится, даже дизайн менять не стал пока. для мобильной версии сайта с длиннными текстами, вещь незаменимая! «Я СПОКОЙНО МОГУ НАЖАТЬ КНОПКУ HOME ИЛИ КЛИКНУТЬ ПО ПОЛОСЕ ПРОКРУТКИ!!!» ну ну… Так что ставим аккуратные прозрачные кнопочки, тестируем на полезность и не слушаем никого!
http://ao-constar.com.ua/produkciya.php
на др. нет
Спасибо за кнопку. Но у меня есть одна проблема — кнопка показывается сразу при загрузке страницы. При начале скроллинга исчезает, а потом снова появляется.
Подскажите, пожалуйста, что не так.
Хотел на hover менять opacity, но не работает с текущим механизмом.
Очень понравилось модальное окно с котом!!!
Не поделитесь скриптом?!
но как указано у вас выше, почему то не срабатывает. Очень интересно почему так происходит?
если меняю на dispaly:block; то при первой загрузке я вижу текст, проблема как в этом комментарии «Но у меня есть одна проблема — кнопка показывается сразу при загрузке страницы. При начале скроллинга исчезает, а потом снова появляется.
Подскажите, пожалуйста, что не так.»
Было бы очень здорово если бы вы ответили, просто интересно почему так происходит.
И изменить код:
Только одновременно это нельзя использовать вместе с кнопкой наверх. Чтоб и то и то было, надо переписывать всё. В комментарии не выложу.
! У Вас на сайте кнопка вверх немного обрезана справа, т.к. в стилях css указаны
height: 60px;
width: 60px;
а не 61 и 63
при загрузке страницы кнопка уже есть (ее быть не должно), а при дальнейшем скролле она пропадает (ее и не должно было быть), но через какое-то количество пикселей появляется вновь (когда и должна). Как отключить ее первичную прогрузку? Или это нормальная работа данного скрипта?
Подскажите, пожалуйста, в чем может быть проблема?
Есть тестовая страница: http://nasledniki.narod.ru/skal/Pik-Porozhisty2.htm
Вначале добавил кнопку «Вверх» как в Вашем примере. Отрабатывала нормально.
Потом добавил скрипт Fancybox для удобного просмотра фотографий. И тут начались проблемы:
1) если кнопка «Вверх» не появилась, и начать просмотр фото, то после выхода из просмотра кнопка «Вверх» не появляется
2) если кнопка «Вверх» появилась, и начать просмотр фото, то после выхода из просмотра кнопка «Вверх» остается навсегда.
Скачайте с официальных сайтов:
http://fancyapps.com/fancybox/3/
https://jquery.com/download/
Помогло обновление библиотек.
Вот страница после изменений, если кому интересно)
http://nasledniki.narod.ru/skal/Pik-Porozhisty.htm
Я испробовал разные варианты установки кнопки. Но почему-то ни один не работает. В итоге остановился на первом вашем варианте. Подскажите, что я сделал не так. Страница размещения: https://avkzarabotok.info/aforex.html. Путь обращения к рисунку написан корректно. Заранее благодарен.
Без доменного имени указывай путь к изображению в стилях. Просто: /images/arrow-up.png
Вы не подскажете, почему у меня не работает Java Script функция #scrollToTop? Адрес сайта: http://jojoanca-jubilee.com.
Заранее спасибо!
Во-вторых, библиотеку jquery.min.js подключите до подключения других скриптов. А потом уже дальше надо будет смотреть что может быть не так.
Вроде бы я подключила этот плагин, но функция пока не работает. Скажите пожалуйста, а какой tool вы используете, чтобы увидеть на что js-скрипт ругается?
Я написала этот код, всё работает, подскажите только, как сделать чтобы вначале страницы кнопка исчезала???
Заранее спасибо
А вместо картинки вполне симпотно выглялит: ⏫
Всё заработает. Или из этого правила удали просто html, для body оставь.
Беглый взгляд на сайт, после удаления html, показывает что все осталось как и прежде… и кнопка заработала!
Спасибо!
Применил на сайте второй вариант. Все отлично заработало и работало. Но неожиданно возникла следующая проблема. При нажатии на кнопку прокрутка стала супермедленная, очень тормозит. С чем это связано, пока не могу понять. Подскажите, пожалуйста, что можно изменить в коде, чтобы прокрутка стала не плавной, а быстрой. Спасибо.
будет быстрее намного
Чтобы моментально наверх перейти, можно обойтись вообще без скриптов — обычная ссылка на страницу и решетка в конце адреса:
Сайт — вырви глаз, привет 90-е
Слеш в начале пути нужен.
Установил, всё работает, но при просмотре сайта со смартфона, кнопка не отображается. Подскажите, в чем может быть проблема?
kapitosha-club.ru
20 попробуйте поменять на 10.
не отображается, подумал что у неё z-index 0, присвоил z-index значение 1 и всё равно её не видно. Могли бы подсказать что делать в такой ситуации???
Код:
window.onload = function () {
var smoothJumpUp = function() {
if (document.body.scrollTop > 0 || document.documentElement.scrollTop > 0) {
window.scrollBy(0,-50);
setTimeout(smoothJumpUp, 10);
}
};
window.onscroll = function() {
var scrolled = window.pageYOffset || document.documentElement.scrollTop;
if (scrolled > 100) {
document.getElementById('upbutton').style.display = 'block';
} else {
document.getElementById('upbutton').style.display = 'none';
}
};
};