Вставляем кнопку «наверх» на сайт
Рассмотрим простой способ создания кнопки «наверх» для сайта, которая будет появляться при прокрутке страницы вниз. Разберем возможность реализации на 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>
Конструкция выполняет скрипт после загрузки всей страницы.
Не помогло? Пиши в комментариях и постараемся найти проблему вместе.
Ошибка «EPROTO» при установке npm пакетов
Перебор элементов на JavaScript
Объявление и применение функций в JavaScript
Оформление placeholder с помощью CSS стилей
Как получить url текущей страницы на JavaScript
Событие onclick в javascript и jquery на примерах
https://gosstandart.info/ все руки не доходили. вот поставил. мило смотрится, даже дизайн менять не стал пока. для мобильной версии сайта с длиннными текстами, вещь незаменимая! «Я СПОКОЙНО МОГУ НАЖАТЬ КНОПКУ HOME ИЛИ КЛИКНУТЬ ПО ПОЛОСЕ ПРОКРУТКИ!!!» ну ну… Так что ставим аккуратные прозрачные кнопочки, тестируем на полезность и не слушаем никого!
http://ao-constar.com.ua/produkciya.php
на др. нет
Спасибо за кнопку. Но у меня есть одна проблема — кнопка показывается сразу при загрузке страницы. При начале скроллинга исчезает, а потом снова появляется.
Подскажите, пожалуйста, что не так.
Хотел на hover менять opacity, но не работает с текущим механизмом.
Очень понравилось модальное окно с котом!!!
Не поделитесь скриптом?!
но как указано у вас выше, почему то не срабатывает. Очень интересно почему так происходит?
если меняю на dispaly:block; то при первой загрузке я вижу текст, проблема как в этом комментарии «Но у меня есть одна проблема — кнопка показывается сразу при загрузке страницы. При начале скроллинга исчезает, а потом снова появляется.
Подскажите, пожалуйста, что не так.»
Было бы очень здорово если бы вы ответили, просто интересно почему так происходит.
И изменить код:
$(window).scroll(function() { if ($(this).scrollTop() < $(document).height()-100) { if ($('#bottombutton').is(':hidden')) { $('#bottombutton').css({opacity : 1}).fadeIn('slow'); } } else { $('#bottombutton').stop(true, false).fadeOut('fast'); } }); $('#bottombutton').click(function() { $('html, body').stop().animate({scrollTop : $(document).height()}, 300); });Только одновременно это нельзя использовать вместе с кнопкой наверх. Чтоб и то и то было, надо переписывать всё. В комментарии не выложу.$('html, body').stop().animate({scrollTop : 200}, 300);! У Вас на сайте кнопка вверх немного обрезана справа, т.к. в стилях css указаны
height: 60px;
width: 60px;
а не 61 и 63
при загрузке страницы кнопка уже есть (ее быть не должно), а при дальнейшем скролле она пропадает (ее и не должно было быть), но через какое-то количество пикселей появляется вновь (когда и должна). Как отключить ее первичную прогрузку? Или это нормальная работа данного скрипта?
#upbutton { display: none; }Либо уже существующие стили его переопределяют, либо этот стиль по каким-то причинам не применяется к кнопке.Подскажите, пожалуйста, в чем может быть проблема?
Есть тестовая страница: http://nasledniki.narod.ru/skal/Pik-Porozhisty2.htm
Вначале добавил кнопку «Вверх» как в Вашем примере. Отрабатывала нормально.
Потом добавил скрипт Fancybox для удобного просмотра фотографий. И тут начались проблемы:
1) если кнопка «Вверх» не появилась, и начать просмотр фото, то после выхода из просмотра кнопка «Вверх» не появляется
2) если кнопка «Вверх» появилась, и начать просмотр фото, то после выхода из просмотра кнопка «Вверх» остается навсегда.
<script src="../fancybox/jquery-1.7.2.min.js" type="text/javascript"> <!--Кнопка--> </script> <link rel="stylesheet" href="../CSS/scrollup.css"> <script type="text/javascript"> $(document).ready(function(){ $(window).scroll(function(){ if ($(this).scrollTop() > 100) { $('.scrollup').fadeIn(); } else { $('.scrollup').fadeOut(); } }); $('.scrollup').click(function(){ $("html, body").animate({ scrollTop: 0 }, 0); return false; }); }); </script> <!--Просмотр фото--> <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox.css"> <!--<script type="text/javascript" src="../fancybox/jquery.easing.1.3.js"></script>--> <script type="text/javascript" src="../fancybox/jquery.fancybox-1.2.1.pack.js"></script> <script type="text/javascript"> $(document).ready(function() { $("a.first").fancybox(); $("a.two").fancybox(); }); </script>Скачайте с официальных сайтов:
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
$(function(){ // сюда весь javascript код с сайта });<a class="dwqdwqd" onclick="$('html, body').animate({scrollTop:0},400)">Подняться наверх</a>Вы не подскажете, почему у меня не работает Java Script функция #scrollToTop? Адрес сайта: http://jojoanca-jubilee.com.
Заранее спасибо!
Во-вторых, библиотеку jquery.min.js подключите до подключения других скриптов. А потом уже дальше надо будет смотреть что может быть не так.
$("#story.panel-body").mCustomScrollbar({ theme:"default" });Вроде бы я подключила этот плагин, но функция пока не работает. Скажите пожалуйста, а какой tool вы используете, чтобы увидеть на что js-скрипт ругается?
Я написала этот код, всё работает, подскажите только, как сделать чтобы вначале страницы кнопка исчезала???
Заранее спасибо
А вместо картинки вполне симпотно выглялит: ⏫
html, body { overflow-x: hidden; }Всё заработает. Или из этого правила удали просто html, для body оставь.Беглый взгляд на сайт, после удаления html, показывает что все осталось как и прежде… и кнопка заработала!
Спасибо!
Применил на сайте второй вариант. Все отлично заработало и работало. Но неожиданно возникла следующая проблема. При нажатии на кнопку прокрутка стала супермедленная, очень тормозит. С чем это связано, пока не могу понять. Подскажите, пожалуйста, что можно изменить в коде, чтобы прокрутка стала не плавной, а быстрой. Спасибо.
var smoothJumpUp = function() { if (document.body.scrollTop>0 || document.documentElement.scrollTop>0) { window.scrollBy(0,-500); setTimeout(smoothJumpUp, 10); } }будет быстрее намногоЧтобы моментально наверх перейти, можно обойтись вообще без скриптов — обычная ссылка на страницу и решетка в конце адреса:
Сайт — вырви глаз, привет 90-е
#upbutton { background: url("/assets/templates/alians/css/up2.png") no-repeat top right; ...Слеш в начале пути нужен.Установил, всё работает, но при просмотре сайта со смартфона, кнопка не отображается. Подскажите, в чем может быть проблема?
kapitosha-club.ru
#upbutton { background: url("/design/default_2/images/up2.png") no-repeat top left; height: 60px; width: 60px; bottom: 30px; right: 50px; cursor: pointer; display: none; position: fixed; z-index: 999; opacity: 0.8; } #upbutton:hover { opacity: 1; }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';
}
};
};