Post picture

Сегодня мы рассмотрим пример, в котором реализуем кнопку «Вернуться наверх». Основная задача данной кнопки — это прокрутка содержимого страницы наверх, то есть в начало. Этот элемент является распространенным и необходимым. Он служит для удобств навигации по сайту для пользователя. Подобные элементы делают ваш сайт, живым и дружелюбным к посетителю. Традиционно составим небольшой план, согласно нему будем двигаться и попутно разбирать, что же происходит на каждом этапе:

Стартовый шаблон.


Создадим стартовый HTML шаблон, с помощью восклицательного знака и клавиши Tab (если в вашем редакторе кода предустановлен emet). Далее пропишем теги <style> и <script>, в которых у нас будут расположены стили и скрипт. Почему я начинаю, статью со стартового шаблона? Ответ прост! Я хочу чтобы информация в статье, была понятна и доступна к пониманию, абсолютно для всех. Ниже приведена стартовая разметка, с которой мы начнем нашу работу:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>КНОПКА НАВЕРХ !</title>
</head>
<style>
    /* --- Здесь опишем стили --- */
</style>

<body>
    <!-- --- Здесь напишем разметку --- -->

<script>
    // --- Здесь напишем скрипт --- 
</script>
</body>

</html>

Разметка кнопки «Наверх».


И так первое, с чем мы будем работать — это собственно разметка. Значит займемся разметкой кнопки. Создадим служебный контейнер с классом .container для выравнивания и внутри этого контейнера создадим заголовок <h1>. В этот заголовок поместим какой-нибудь текст, для наглядности. Также создадим контейнер с классом .go-top и id =’goTop’. Это собственно и будет элемент, с которым мы будем взаимодействовать средствами JavaScript.
Но это еще не все ! Теперь нам необходима иконка со стрелкой указывающей вверх. Будем использовать <svg>. Для этого идем на любой сайт, где можно раздобыть svg иконку и копируем её в буфер обмена. Я использую Font Awesome, но это не панацея. Вы можете воспользоваться любым другим сервисом. Возвращаемся в редактор кода и вставляем содержимое в наш контейнер, c классом .go-top. На этом работу над разметкой кнопки «Вернуться наверх», можно считать оконченной. И вот что у нас получилось:

<div class="container">
   <h1>Прокрути бегунок вниз чтоб оценить работу скрипта !</h1>
   <div class="go-top" id="goTop">
      <svg xmlns="" viewBox="0 0 384 512">
         <path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z" />
      </svg>
   </div>
</div>

Стили кнопки «Вернуться наверх».


Далее мы пропишем стили для нашего блока с кнопкой. В стилях я, как обычно, буду использовать переменные, потому что, такой способ стилизации гибкий и дает возможность быстро настраивать внешний вид кнопки. Вам достаточно поменять значения переменных и кнопка тут же преображается по вашему вкусу. Я считаю это удобным ! В значениях мы зададим размер, цвет иконки, а также цвет иконки при наведении курсора и закругление. Думаю для кнопки этого будет достаточно.
Еще мы опишем класс .go-top—show, который будет делать нашу кнопку видимой или невидимой, в зависимости от положения скроллинга на странице. В .container у нас имеется {min-height: 250vh;} , и как вы правильно догадались — это просто имитация контента. В реальном проекте у вас будет реальный контент, и это свойство вам не понадобиться. Вот такие вот стили у нас получились:

<style>
.container {
     max-width: 1200px;
     margin: 0 auto;
     padding-left: 1rem;
     padding-right: 1rem;
     min-height: 250vh;
 }
 
.go-top {
     --size: 1.5rem;
     --color: rgb(251, 248, 248);
     --color-hover: rgb(55, 47, 47);
     --bg-color: rgb(9, 251, 5);
     --transition: all 0.3s ease-in-out;
     --radius: 0.25rem;
 
     position: fixed;
     right: 10%;
     bottom: 10%;
     z-index: -100;
     cursor: pointer;
     visibility: hidden;
     opacity: 0;
     transition: var(--transition);
     background-color: var(--bg-color);
     border-radius: var(--radius);
     padding: var(--size);
 }
 
 .go-top svg {
      width: var(--size);
      height: var(--size);
      fill: var(--color);
      transition: var(--transition);
 }
 
 .go-top:hover svg {
      fill: var(--color-hover);
      transition: var(--transition);
 }
 
.go-top--show {
      z-index: 9999;
      transition: var(--transition);
      visibility: visible;
      opacity: 1;
 }
</style>

Скрипт для функционирования модуля.


Переходим к написанию скрипта. Скрипт организуем в виде класса, что сделает его удобным в использовании. Всего два аргумента будем передавать в наш класс — это id нашей кнопки, и класс видимости кнопки (в нашем случае это .go-top—show). Всю логику опишем в одном методе goTop(), потому что, чем проще, тем лучше. Основные события отметим комментариями.

<script>
    class GoTop {
        // --- передаем аргументы в конструктор ID кнопки и класс скрытия ---
        constructor(containerID, visibleClass) {
            this.btn = document.getElementById(containerID);
            this.showClass = visibleClass;
        }
        // ---  метод отслеживает положение скроллинга и клик по кнопке ---
        gotop() {
            window.addEventListener("scroll", () => {
                let scrolled = window.pageYOffset;
                let coords = document.documentElement.clientHeight;
                scrolled > coords ?
                    this.btn.classList.add(this.showClass) :
                    this.btn.classList.remove(this.showClass);
            });
            this.btn.addEventListener("click", () => {
                window.pageYOffset > 0 ? window.scrollTo({ top: 0, behavior: 'smooth' }) : ''
            });
        }
        // --- инициализируем метод ---
        init() {
            this.gotop();
        }
    }

    // --- Присваиваем новой переменной наш объект,  ---
    // --- передаем в него 2 аргумента и инициализируем его---

    let goTop = new GoTop(
        'goTop',             // -- ID контейнера
        'go-top--show' // -- класс показать кнопку
    ).init()
</script>

Готовый код кнопки «Вернуться наверх».


Ну вот наша сегодняшняя статья и подошла к завершению, и нам лишь осталось собрать все кусочки в один файл index.html, чтобы запустить его в браузере и оценить результат проделанной работы:

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>КНОПКА НАВЕРХ !</title>
</head>
 
<style>
.container {
     max-width: 1200px;
     margin: 0 auto;
     padding-left: 1rem;
     padding-right: 1rem;
     min-height: 250vh;
 }
 
.go-top {
     --size: 1.5rem;
     --color: rgb(251, 248, 248);
     --color-hover: rgb(55, 47, 47);
     --bg-color: rgb(9, 251, 5);
     --transition: all 0.3s ease-in-out;
     --radius: 0.25rem;
 
     position: fixed;
     right: 10%;
     bottom: 10%;
     z-index: -100;
     cursor: pointer;
     visibility: hidden;
     opacity: 0;
     transition: var(--transition);
     background-color: var(--bg-color);
     border-radius: var(--radius);
     padding: var(--size);
 }
 
 .go-top svg {
      width: var(--size);
      height: var(--size);
      fill: var(--color);
      transition: var(--transition);
 }
 
 .go-top:hover svg {
      fill: var(--color-hover);
      transition: var(--transition);
 }
 
.go-top--show {
      z-index: 9999;
      transition: var(--transition);
      visibility: visible;
      opacity: 1;
 }
</style>
 
<body>
<div class="container">
   <h1>Прокрути бегунок вниз чтоб оценить работу скрипта !</h1>
   <div class="go-top" id="goTop">
      <svg xmlns="" viewBox="0 0 384 512">
         <path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z" />
      </svg>
   </div>
</div>
 
    <script>
     class GoTop {
     // --- передаем аргументы в конструктор ID кнопки и класс скрытия ---
     constructor(containerID, visibleClass) {
         this.btn = document.getElementById(containerID);
         this.showClass = visibleClass;
      }
      // ---  метод отслеживает положение и клик ---
      gotop() {
         window.addEventListener("scroll", () => {
             let scrolled = window.pageYOffset;
             let coords = document.documentElement.clientHeight;
             scrolled > coords ?
                 this.btn.classList.add(this.showClass) :
                 this.btn.classList.remove(this.showClass);
            });
           this.btn.addEventListener("click", () => {
               window.pageYOffset > 0 ? window.scrollTo({ top: 0, behavior: 'smooth' }) : ''
           });
       }
       // --- инициализируем метод ---
       init() {
           this.gotop();
       }
     }
 
     // --- Присваиваем новой переменной наш объект,  ---
     // --- передаем в него 2 аргумента и инициализируем его---
 
     let goTop = new GoTop(
     'goTop',             // -- ID контейнера
     'go-top--show' // -- класс показать кнопку
     ).init()
    </script>
</body>
</html>

PostScriptum: HTML с английского HyperText Markup Language — что переводиться как «язык гипертекстовой разметки». Стандартизированный язык гипертекстовой разметки документов для просмотра веб-страниц. Браузеры получают HTML документ от сервера по протоколам HTTP или HTTPS, интерпретируют код в интерфейс и отображают на экране вашего монитора.

Всем добра ! Задавайте вопросы и оставляйте комментарии.

 DEMO

WebLegko

Здесь мы занимаемся изучением основ веб-программирования. Присоединяйтесь !

Добавить комментарий