Данная кнопка имеет понятную для всех задачу - если кликнуть мышкой по ней, она оправит нас к началу страницы. Разработчики шаблонов обычно устанавливают её в нижней части, как правило, это просто текстовая ссылка. Но в некоторых случаях это может быть изображение или даже целая область. Наверняка вы встречали сайты, на которых вся левая часть отводиться под ту самую кнопку «Наверх», согласитесь удобно! Если ваш ресурс содержит страницы, высота которых заставляет пользователей долго прокручивать её роликом мыши, то вам такая кнопка просто не обходима. Но как же сделать её самостоятельно? Мы рассмотрим самый просто и один из сложных вариантов создания такой кнопки.

Кнопка «Наверх»

Для того чтобы не было путаницы, возьмём стандартный шаблон «protostar» выставленный по умолчанию после установки Joomla. Будем работать с файлами расположенными в следующем каталоге на сервере … /templates/protostar/.

Стандартный шаблон Protostar

Простой способ

Легче всего такую кнопку создать при помощи этого кода:

HTML код:
  1. <a href="#top">Наверх</a>

Вставляем в любую часть шаблона и всё.

Простой способ кнопки «Наверх»

Но у такого способа есть минус, по нажатию нас резко перебрасывает в верхнюю часть страницы. С задачей она справляется хорошо, но это не совсем красиво.

Более сложный способ

Теперь нам необходимо создать кнопку, которая будет эффектно появляться. То есть когда мы опускаемся вниз, она «всплывает». Помимо этого эффекта, по нажатию она должна плавно поднять нас к началу страницы.

Нам понадобится:

  1. Картинка PNG
  2. Код для вставки в шаблон
  3. Java скрипт для анимации

Находим любую картинку в интернете, формат PNG. Лучше если она будет маленького размера. После чего переименовываем и при помощи программы FileZilla бросаем на сервер в директорию …/templates/protostar/images/up.png. «up.png» - это наше изображение.

Изображение кнопки Up

Далее, необходимо скачать на компьютер файл index.php и открыть его через Notepad++.

Редактирование index.php

В самом низу находим стандартную кнопку этого шаблона:

HTML код:
  1. <a href="#top" id="back-top">
  2. <?php echo JText::_('TPL_PROTOSTAR_BACKTOTOP'); ?>
  3. </a>

Меняем её полностью на следующий код:

HTML код:
  1. <div id="gotop" style="float:right">
  2. <a href="#" onclick="top.goTop(); return false;" title="Наверх"><img src="<?php echo JURI::base (true); ?>/templates/protostar/images/up.png" /></a>
  3. <script type="text/javascript" src="<?php echo JURI::base (true); ?>/templates/protostar/js/scrolling.js"></script>
  4. </div>

Должно получиться так:

Результат редактирования

Мы удалили старую кнопку «Наверх», в место неё прописали путь до нашей картинки «up.png» на сервере и подключили свой скрипт. На самом деле его нам ещё предстоит создать, но с начала index.php возвращаем в туже директорию с заменой …/templates/protostar/index.php. Теперь, если открыть сайт, то увидим полностью рабочую кнопку без анимации.

Сложный способ кнопки «Наверх»

Здесь стоит упомянуть идентификатор id="gotop" в теге div. Мы не будем использовать таблицу стилей, но нам этот идентификатор всё равно потребуется. В java скрипте будет расположена небольшая функция, отвечающая за эффект «всплывание» и этот самый id="gotop" там прописан. Если удалить, то работать не будет.

Дальше нам следует создать файл scrolling.js используя редактор Notepad++. Открываем программу и нам сразу загружают пустой документ, нажимаем Ctrl+Alt+S. Пишем название scrolling, а внизу выбираем тип файла «JavaScript file».

Создание файл scrolling.js

Теперь открываем созданный нами файл scrolling.js и пишем в него вот этот большой код:

Javascript код:
  1. (function() {
  2.  
  3. function $(id){
  4. return document.getElementById(id);
  5. }
  6.  
  7. function goTop(acceleration, time) {
  8. acceleration = acceleration || 0.1; // Скорость подъёма: 0.01 - очень медленно, 1 - очень быстро (рекомендую - 0.1)
  9. time = time || 10;
  10.  
  11. var dx = 0;
  12. var dy = 0;
  13. var bx = 0;
  14. var by = 0;
  15. var wx = 0;
  16. var wy = 0;
  17.  
  18. if (document.documentElement) {
  19. dx = document.documentElement.scrollLeft || 0;
  20. dy = document.documentElement.scrollTop || 0;
  21. }
  22. if (document.body) {
  23. bx = document.body.scrollLeft || 0;
  24. by = document.body.scrollTop || 0;
  25. }
  26. var wx = window.scrollX || 0;
  27. var wy = window.scrollY || 0;
  28.  
  29. var x = Math.max(wx, Math.max(bx, dx));
  30. var y = Math.max(wy, Math.max(by, dy));
  31.  
  32. var speed = 1 + acceleration;
  33. window.scrollTo(Math.floor(x / speed), Math.floor(y / speed));
  34. if(x > 0 || y > 0) {
  35. var invokeFunction = "top.goTop(" + acceleration + ", " + time + ")"
  36. window.setTimeout(invokeFunction, time);
  37. }
  38. return false;
  39. }
  40.  
  41. //*
  42. function scrollTop(){
  43. var el = $('gotop');
  44. var stop = (document.body.scrollTop || document.documentElement.scrollTop);
  45. if(stop>400){
  46. if(el.style.display!='block'){
  47. el.style.display='block';
  48. smoothopaque(el, 0, 100, 1);
  49. }
  50. }
  51. else
  52. el.style.display='none';
  53.  
  54. return false;
  55. }
  56.  
  57. // Плавная смена прозрачности
  58. function smoothopaque(el, startop, endop, inc){
  59. op = startop;
  60. // Устанавливаем прозрачность
  61. setopacity(el, op);
  62. // Начинаем изменение прозрачности
  63. setTimeout(slowopacity, 1);
  64. function slowopacity(){
  65. if(startop < endop){
  66. op = op + inc;
  67. if(op < endop){
  68. setTimeout(slowopacity, 1);
  69. }
  70. }else{
  71. op = op - inc;
  72. if(op > endop){
  73. setTimeout(slowopacity, 1);
  74. }
  75. }
  76. setopacity(el, op);
  77. };
  78. };
  79. // установка opacity
  80. function setopacity(el, opacity){
  81. el.style.opacity = (opacity/100);
  82. el.style.filter = 'alpha(opacity=' + opacity + ')';
  83. };
  84.  
  85. if (window.addEventListener){
  86. window.addEventListener("scroll", scrollTop, false);
  87. window.addEventListener("load", scrollTop, false);
  88. }
  89. else if (window.attachEvent){
  90. window.attachEvent("onscroll", scrollTop);
  91. window.attachEvent("onload", scrollTop);
  92. }
  93.  
  94. window['top'] = {};
  95. window['top']['goTop'] = goTop;
  96.  
  97. })();

Остаётся только сохранить изменения и загрузить его в следующую директорию …/templates/protostar/js/scrolling.js.

Сохранение scrolling.js

После всех действий проверяем результат на сайте.

Заключение

Технически, подключать скрипт в том месте, где мы вставили код не совсем правильно. Его принято писать ближе к началу страницы, чтобы при открытии браузером скрипт первым загружался. Но для тех, кто только знакомиться с PHP можно оставить как есть, код всё равно будет работать. Мы так же не стали писать стили для нашей кнопки, потому что используем обычное изображение. Но при желании можно изменить форму и размер, используя файл template.css в папке «css».


 
4.5515695067265 1 1 1 1 1 (Оценок: 223)
4.5515695067265 223
Опубликовано: 15-05-2016

Комментарии  

big
+1 #3 big 03.09.2021 20:46
Доступно и просто - работает.
Хотя, требуется небольшого дополнения.
Чтобы подняться наверх, необходимо спуститься в самый низ.
Пожалуйста - Допишите, чтобы кнопка "наверх" появлялась сразу при прокрутке вниз.
Спасибо.
No More
0 #2 No More 22.05.2016 00:50
Спасибо, дельная статья. Все действия расписаны подробно, да еще и со скринами. Я выбрала второй способ: всё получилось с первого раза.
Василий
+2 #1 Василий 22.05.2016 00:23
Реально полезная вещь, когда страницы сайта содержат большие статьи или много изображений, листать обратно вверх если не сделано плавающее меню довольно не удобно. Спасибо JoomFox!

Вы не зарегистрированы, чтобы оставлять комментарии.