Сейчас: 01:37:51   19-го апреля 2024 г.
UsefulScript.ruСкриптыРазныеКнопки вверх и вниз
197
645

Кнопки вверх и вниз с плавным появлением и плавной прокруткой

Данная тема является более продвинутым и компактным вариантом ранее созданной темы Кнопка вверх с плавным появлением. Основным отличием данной темы от указанной является наличие кнопки вниз.


Наглядный пример работы кнопок вверх и вниз, реализуемых при помощи JavaScript и jQuery, Вы можете наблюдать в правом нижнем углу нашего сайта.


Обратите внимание, что кнопка вверх плавно появляется только тогда, когда страничка прокручена вниз на указанное количество пикселей и плавно пропадет в том случае, если страничка была прокручена вверх выше указанного значения в пикселях. Кнопка вниз, наоборот, изначально видна и плавно исчезает, когда страничка прокручивается вниз ниже указанного значения и плавно появляется, когда страничка была прокручена вверх выше определенного значения. При нажатии на кнопку вверх или вниз осуществляется плавная прокрутка странички в заданном направлении, а не резкий перескок к началу или концу странички.


Для получения на Вашей страничке кнопок вверх и вниз, сходных с теми, что Вы можете наблюдать на нашем сайте, Вам необходимо будет подключить библиотеку jQuery. Данная библиотека реализует плавную прокрутку странички вверх и вниз, а также позволяет делать плавное появление и исчезновение кнопок. Подключать библиотеку jQuery следует следующим образом:

JavaScript код:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>

Кнопки для прокрутки странички вверх и вниз с JavaScript кодом рекомендуем размещать в самом конце странички перед тегом </body>. Это позволит немного увеличить скорость загрузки основного содержимого Вашего сайта.


После подключения библиотеку jQuery, добавьте в конец Вашей странички JavaScript код, который будет отвечать за прокрутку, появление и исчезновение кнопок вверх и вниз:

JavaScript код:
<script type="text/javascript">
jQuery(function(){
 $(
"#Go_Top").hide();
 if ($(
window).scrollTop()>=250) $("#Go_Top").fadeIn("slow")
 $(
window).scroll(function(){
  if ($(
window).scrollTop()<=250) $("#Go_Top").fadeOut("slow")
  else $(
"#Go_Top").fadeIn("slow")
 });

 $(
"#Go_Bottom").hide();
 if ($(
window).scrollTop()<=$(document).height()-999) $("#Go_Bottom").fadeIn("slow")
 $(
window).scroll(function(){
  if ($(
window).scrollTop()>=$(document).height()-999) $("#Go_Bottom").fadeOut("slow")
  else $(
"#Go_Bottom").fadeIn("slow")
 });

 $(
"#Go_Top").click(function(){
  $(
"html, body").animate({scrollTop:0}, "slow")
 })
 $(
"#Go_Bottom").click(function(){
  $(
"html, body").animate({scrollTop:$(document).height()}, "slow")
 })
});
</script>

Теперь остается только добавить и описать наши кнопки для прокрутки странички вверх и вниз. Делается это следующим образом:

HTML код:
<img src="image/go_up.png" alt="Наверх" title="Наверх" id="Go_Top"
style="position: fixed; bottom: 60px; right: 1px; cursor: pointer;">

<
img src="image/go_bottom.png" alt="Вниз" title="Вниз" id="Go_Bottom"
style="position: fixed; bottom: 20px; right: 1px; cursor: pointer;">

Для отображения кнопок вверх и вниз, как правило, лучше использовать любые изображения по Вашему усмотрению.

Дата создания: 22:22:08 03.05.2012 г.
Дата обновления: 12:24:51 18.10.2012 г.
Посещений: 45533 раз(а).

Комментарии посетителей (66 шт.):
Алексей
32
# 129
(23:18:09  03.05.2012 г.)

Потрясающе! Идеальное решение для длиннющего скроллинга на сайте. Спасибо!
Ответить

Денис
5
# 193
(19:35:01  20.06.2012 г.)

У меня стоит на сайте:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
заменить, или работать будет?
Ответить

Administrator
7
# 194
(20:24:05  20.06.2012 г.)

Денис, только что проверил в Опере и IE. Все работает.
Ответить

Валерий
8
# 245
(16:19:55  04.08.2012 г.)

Подскажите, пожалуйста, какие цифры редактировать, чтоб кнопка вверх появлялась через определённое количество пикселей?
Ответить

Administrator
4
# 246
(16:28:37  04.08.2012 г.)

Валерий, в JavaScript коде в строчке if ($(window).scrollTop()>=250), где 250 - количество пикселей от начала странички.
Ответить

Михаил
4
# 277
(09:28:14  28.08.2012 г.)

<a style='position: fixed; bottom: 20px; right: 1px; ...

Захотел сделать в центре стрелки. Поставил в строке выше: center: 1px. Пробовал center: 50%, center просто. Сначала выводит все ок. Но стоит промотать вверх или вниз (когда стрелка прячется), то в последующем стрелка после появления смещается влево. Но никак не хочет появляться в центре. Подскажите что не так? :)
Ответить

Administrator
-1
# 278
(19:59:38  28.08.2012 г.)

Михаил, попробуйте center: 50% заменить на left: 50%;
Ответить

Александр
3
# 285
(15:04:03  03.09.2012 г.)

Подскажите, пожалуйста, в какой файл вводить весь этот код, если у меня допустим скачанная тема блога с интернета, и в папке с темой почти все файлы РНР, в какой файл именно? Заранее спасибо!
Ответить

Administrator
1
# 286
(20:16:20  03.09.2012 г.)

Александр, добавьте данный код в любой файл, который подгружается при формировании странички (например, Footer.php).
Ответить

Михаил
1
# 292
(00:33:04  09.09.2012 г.)

Здравствуйте. Спасибо большое все получилось.
Подскажите, пожалуйста, в чем может быть проблема, у меня "стрелка" показывает только наверх.
Ответить

Administrator
0
# 293
(01:01:42  09.09.2012 г.)

Михаил, добавьте самой первой строчкой тип текущего документа (DOCTYPE HTML), проверьте наличие тегов html и body, а также подключена ли библиотека jQuery.
Ответить

VSD
0
# 349
(00:34:03  18.10.2012 г.)

Здравствуйте, классный скриптик, спасибо Вам за выкладывание в паблик. У меня возник по нему вопрос, при нажатии на кнопку "Вниз" происходит прокрутка страницы, но не до конца (пикселей на 200 вниз опускает), как сделать что бы при нажатии "вниз" страничка прокручивалась до конца вниз?
П.С. прокрутка вверх работает нормально.
Ответить

Administrator
0
# 350
(12:22:55  18.10.2012 г.)

VSD, это может быть из-за отсутствия или неправильного размещения тегов html и body. Скрипт уже исправил на более универсальный.
Ответить

Ден
-1
# 406
(12:52:01  21.11.2012 г.)

Спасибо за кнопки - все супер, но возник вопрос:
Если страница очень длинная и нажал кнопку прокрутки вниз (с измененным параметром SLOW на 100000 для плавного скроллинга) - как остановить прокрутку, если нужно (например, нажатием мышки или кнопкой "Пауза":) не ждать пока вся страница будет крутиться вниз?
Ответить

Administrator
5
# 418
(13:37:35  25.11.2012 г.)

Ден, после строки jQuery(function(){ добавьте следующее:
$("#STOP").click(function(){
$("html, body").stop();
return false;
});
Далее необходимо создать объект с id='STOP', при клике на который необходимо остановить прокрутку. Например:
<a style='position: fixed; bottom: 100px; right: 1px;' href='#' id='STOP'>STOP</a>
Ответить

Андрей
1
# 409
(16:02:34  22.11.2012 г.)

Подскажите, как сделать так, чтобы прокручивалась страничка на какое-то количество пикселей, к примеру, на 200, а потом ее можно было докрутить вниз?
Ответить

Administrator
3
# 411
(21:04:44  22.11.2012 г.)

Андрей, для этого замените строчку $("html, body").animate({scrollTop:$(document).height()},"slow")
на такую: $("html, body").animate({scrollTop:$(window).scrollTop()+200},"slow")
Ответить

ирина
1
# 437
(22:24:16  02.12.2012 г.)

Подскажите, пожалуйста, куда добавить описания стиля кнопки для прокрутки, не могу понять.
Ответить

Administrator
2
# 438
(22:47:17  02.12.2012 г.)

Ирина, не совсем понял вопроса. Кнопками для прокрутки может быть любой элемент с id='Go_Top' и id='Go_Bottom'. Данным элементам Вы можете задать свой стиль.
Ответить

ирина
-2
# 439
(23:47:31  02.12.2012 г.)

Да, я поняла, задала свой стиль с помощью CSS получилось не плохо, мне нравится, отличный настраиваемый скрипт. Спасибо!
Ответить

Павел
1
# 445
(01:56:00  09.12.2012 г.)

Спасибо за пост! Проблема возникла только с $("#Go_Top"). Из-за несовместимости версий jquery у меня на сайте ругался на $. Сделал: jQuery(function($){
Ответить

Михаил
2
# 526
(23:40:53  07.01.2013 г.)

Подскажите, что нужно поменять в скрипте, чтобы действие распространялось не к началу странички, а к началу блока div с overflow: scroll;. Зараннее спасибо.
Ответить

Administrator
1
# 530
(16:19:20  08.01.2013 г.)

Михаил, добавьте блоку id (например, id='div_scroll') и замените строчку
$("html, body").animate({scrollTop:0}, "slow") на такую:
$("html, body").animate({scrollTop:$("#div_scroll").position().top}, "slow")
Ответить

Анатолий
-1
# 528
(01:22:57  08.01.2013 г.)

Здравствуйте. Скажите, как задать скорость прокрутки страницы. Мне, например, хотелось бы, чтобы прокрутка была медленнее.
Ответить

Administrator
5
# 531
(16:22:19  08.01.2013 г.)

Анатолий, достаточно заменить $("html, body").animate({scrollTop:0}, "slow") на
$("html, body").animate({scrollTop:0}, 5000)
Ответить

Элеанора
0
# 706
(21:26:48  26.03.2013 г.)

Здравствуйте. Я совсем новичок, добавила скрипт на форум, но он с чем-то конфликтует. Перестали вставляться смайлики, и вообще меню над сообщением не откликается, подскажите, пожалуйста, можно как-то исправить?
Ответить

Administrator
1
# 707
(22:01:56  26.03.2013 г.)

Для того чтобы избежать конфликта jQuery c уже имеющимися скриптами, поместите наш JavaScript код внутри следующей конструкции:
jQuery.noConflict();
(function($){

})(jQuery);
Именно так сделано у нас на форуме (можете глянуть исходный код).
Ответить

Кахрамон
0
# 726
(20:37:33  31.03.2013 г.)

Здравствуйте. Спасибо отличный скрипт, только почему у меня в IE не пашет, а все остальные браузеры отлично поддерживают (а на вашем сайте почему-то работает в IE).
Ответить

Administrator
0
# 727
(20:44:18  31.03.2013 г.)

Возможно, все дело в DOCTYPE HTML на Вашем сайте.
Ответить

Кахрамон
0
# 728
(22:23:33  31.03.2013 г.)

У меня <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Ответить

Кахрамон
1
# 730
(18:46:59  01.04.2013 г.)

Всё понял обычно IE не понимает css3 - position (т.е. позиционирование), а
http://www.w3.org/TR/html4/loose.dtd
и/или
http://www.w3.org/TR/html4/strict.dtd
это специально добавляемые, что бы IE принял position.
Респект автору СПАСИБО!
Ответить

Веталь
1
# 866
(17:49:06  20.05.2013 г.)

Стрелка "вниз" так и не появилась... Может, знаете в чем трабла?
Ответить

Владимир
0
# 901
(21:05:43  29.05.2013 г.)

Здравствуйте! Во-первых Спасибо за труды - все доходчиво и понятно даже такому "чайнику" в этом деле как я.
Как сделать прокрутку вниз на одну страницу аналогично клавише "PageDown"?
Ответить

Administrator
3
# 902
(21:18:50  29.05.2013 г.)

Делается легко. Замените строку $("html, body").animate({scrollTop:0}, "slow")
на $("html, body").animate({scrollTop:$(window).scrollTop()-$(window).height()}, "slow")
а строку $("html, body").animate({scrollTop:$(document).height()}, "slow")
на $("html, body").animate({scrollTop:$(window).scrollTop()+$(window).height()}, "slow")
Ответить

Джаник
0
# 925
(14:55:23  11.06.2013 г.)

Не хотят отображаться стрелки на блоге. Почитал комментарии и заключил скрипт в блок jQuery.noConflict() - стрелки появились, но - нет плавной прокрутки, мало того, при нажатии кнопки "вниз" все равно перескакивает наверх. Подскажите пожалуйста, что не так.
Ответить

Administrator
0
# 926
(15:48:06  11.06.2013 г.)

Ответил Вам на нашем форуме - http://usefulscript.ru/forum/showthread.php?tid=217
Ответить

Михаил
0
# 1075
(17:48:10  31.08.2013 г.)

Скажите, где задать скорость прокрутки страницы вверх.
Подскажите, как сделать так, чтобы прокручивалась страничка на какое-то количество пикселей, к примеру, на 200, не только вниз, но и вверх.
Ответить

Administrator
0
# 1077
(18:10:02  31.08.2013 г.)

Читайте комментарии выше. На данные вопросы уже есть ответы (комментарий 411 и 531).
Ответить

Михаил
0
# 1078
(19:02:14  31.08.2013 г.)

В соответствии с рекомендацией (комментарий 411) прокрутка на 200px осуществляется только по стрелке вниз. Стрелка вверх переводит в начало страницы. Скорость также регулируется только по стрелке вниз.
Ответить

Administrator
1
# 1079
(21:09:02  31.08.2013 г.)

Неужели так трудно по аналогии сделать тоже самое и для кнопки вверх:
$("#Go_Top").click(function(){
$("html, body").animate({scrollTop:$(window).scrollTop()-200}, 3000)
})
Ответить

Михаил
1
# 1081
(22:07:56  31.08.2013 г.)

Спасибо. Надоумили.
Последний вопрос: Чтобы кнопка вниз появлялась и исчезала через определённое количество пикселей в JavaScript коде в строках if ($(window).scrollTop()<=$(document).height()-999) а также if ($(window).scrollTop()>=$(document).height()-999), задаём 999 - количество пикселей от низа странички?
Ответить

Administrator
1
# 1083
(22:30:53  31.08.2013 г.)

Не знаю, как правильно назвать. $(window).scrollTop() - расстояние от начала до верхней видимой на данный момент части странички. $(document).height() - высота всей странички.
999 - это пороговое значение, когда разница между значением от низа странички до верха видимой на данный момент части странички становится меньше этого значения, то кнопка пропадает. Если разрешение экрана у Вас большое, то следует увеличить данное значение.
Ответить

Никита
0
# 1252
(15:07:25  05.11.2013 г.)

Доброго времени суток!
У меня почему-то кнопки так и не появились :(
Ответить

Administrator
0
# 1256
(20:40:23  05.11.2013 г.)

Обновите библиотеку jQuery, а еще лучше подключите с сервера Гугла, как у нас.
P.S. Ссылку на сайт удалил.
Ответить

Никита
0
# 1257
(00:35:26  06.11.2013 г.)

Поставил jQuery с Гули, стрелок все равно нет :(
Ответить

Administrator
0
# 1261
(19:25:12  06.11.2013 г.)

Вся проблема в одной строчке Вашего сайта: ('a.window').lightBox();
Если ее удалить, то все работает.
Ответить

Никита
0
# 1263
(20:14:04  06.11.2013 г.)

Мдаа, одно решение породило другие проблемы :)

Теперь, когда нажимаешь вниз, а потом вверх, стрелочки исчезают, а также перестал работать lightbox (самые нижние картинки на нем стоят). Что не так, не пойму... :(
Ответить

Administrator
0
# 1264
(20:40:05  06.11.2013 г.)

Это скрипты конфликтуют (наш с prototype.js). Придется от чего-то отказаться.
Ответить

Никита
1
# 1265
(20:51:50  06.11.2013 г.)

Выше читал, что можно избежать конфликта, запихав скрипт в какую-то конструкцию обособленную...
Тут прокатит?
Ответить

Administrator
2
# 1266
(20:59:10  06.11.2013 г.)

В Вашем случае думаю что нет, т.к. prototype.js тоже работает со свойствами изображений стрелок (display).
Ответить

Valerchik
0
# 1276
(13:31:15  11.11.2013 г.)

Хорошее решение. Лаконичное и удобное. Использовал только вверх-часть :) При <!DOCTYPE HTML> тоже работает. Спасибо автору.
Ответить

Савелий
-1
# 1297
(20:37:24  17.11.2013 г.)

Установил ваш код с паузой. Спасибо, встало всё как родное и работает.
Поигравшись, понял, что идеальный вариант - это не кнопка *пауза*,
а если паузой является сама стрелка. Т.е. нажали - поехала страница, увидели что-то интересное - кликнули по этой же стрелке - страница застыла. Кликнули ещё - поехала дальше.
Подскажите, что подправить в js. Заранее признателен!
Ответить

Administrator
1
# 1300
(20:46:29  18.11.2013 г.)

Ваша идея нам понравилась, и готовый скрипт мы выложили в виде отдельной темы на форуме.
Ответить

Евгений
0
# 1365
(23:24:42  23.12.2013 г.)

Вечер добрый, подскажите, что нужно добавить или поменять, чтобы при нажатии на кнопку вниз, страница останавливалась на определенном блоке. Если делать через
$("html, body").animate({scrollTop:$(window).scrollTop()+200}, "slow")
то она может прокрутиться выше или ниже, а нужно именно на определенном блоке. Например: я в шапке нажимаю на кнопку вниз, и она опускается до блока с обратной связью. Заранее спасибо.
Ответить

Administrator
0
# 1366
(23:49:49  23.12.2013 г.)

Достаточно заменить строчку $("html, body").animate({scrollTop:$(document).height()}, "slow")
на $("html, body").animate({scrollTop:$("#stop").offset().top}, "slow"), где stop это id нужного элемента.
Ответить

Евгений
1
# 1367
(01:01:47  24.12.2013 г.)

Спасибо, все получилось, только еще один вопрос, я хочу сделать для нескольких кнопок такую прокрутку, вставляю в нужные кнопки id="GoBottom" но работает только с одной, как сделать, что бы на всех кнопках такая функция работала?
Ответить

Administrator
-1
# 1373
(20:09:33  24.12.2013 г.)

Во всем JavaScript коде замените "#Go_Bottom" на ".Go_Bottom", а в кнопках вместо id="GoBottom", сделайте class="GoBottom".
Ответить

NormGold
0
# 1384
(13:16:37  02.01.2014 г.)

Быстро и легко получилось! Спасибо! Почему у меня кнопка могут быть не прозрачными? Вокруг стрелок показывается белый фон, а на самом деле фон прозрачный, картинки в формате .png
Ответить

Екатерина
0
# 1406
(01:40:09  16.01.2014 г.)

Здравствуйте! Подскажите, есть ли плагин для браузера Google Chrome для прокрутки страницы вниз? Для прокрутки вверх я нашла и установила, а вот чтобы вниз прокручивать - пока не нашла.
Ответить

Administrator
0
# 1408
(20:33:44  16.01.2014 г.)

Это Вам надо обращаться к разработчикам плагинов для Chrome, а мы занимаемся скриптами для сайтов.
Ответить

Лидия
-1
# 2010
(13:47:40  29.10.2014 г.)

Здравствуйте, помогите, пожалуйста, сделать кнопки прокрутки влево/вправо.
Ответить

Administrator
3
# 2013
(22:38:09  29.10.2014 г.)

Замените в JavaScript коде все упоминания scrollTop на scrollLeft, а height на width.
Ответить

Алексей
1
# 2973
(16:30:31  15.01.2016 г.)

День добрый хороший скрипт но у меня возникли вопросы. Я использую данный плагин на Landing page у меня 8 блоков, которые разбросаны по всей странице. Когда я открываю любой из этих блоков, все блоки, которые были сверху закрываются и открываются тока тот блок, на который нажал. И меня бросает в самый низ страницы. Можно ли как нить сделать так, чтобы при открытии другого блока блоки выше не закрывались. Я пробовал продублировать скрипт поменяв в нем название блока. Но это тоже не помогло. Все равно идет закрытие всех блоков. Могу скинуть ссылку на сайт.
Ответить

Administrator
2
# 2976
(23:02:45  15.01.2016 г.)

Конечно, лучше бы посмотреть, кидайте ссылку (она опубликована не будет).
Ответить

BryndinAleksandr
0
# 4554
(13:46:50  19.11.2019 г.)

При обновлении страницы исчезает кнопка, почему так?
Ответить

Елена
0
# 5002
(15:04:13  01.09.2023 г.)

Добрый день. Скрипт работает, только на нашем сайте вместо стрелок вверх и вниз показывает код 404, очень жаль.
Ответить

Закрыть
Ваше имя:
119 + 13 =
Добавить комментарий:
Ваше имя:
119 + 13 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 8

Какой браузер Вы используете?