Dobrovoi Master
сделано с душой
В состоянии постоянного подключения...

Анимация для кнопки “Вернуться Наверх”

Кнопка «Вернуться Наверх» или «» популярный и полезный элемент на страницах современных сайтов, особенно в тех случаях, когда на этих страницах размещено много контента.
Прежде всего, такие в целом улучшают юзабилити сайта. Когда пользователь ознакомившись с большим количеством контента, прокрутив страницу до самого низа, чтобы вернуться в верхнюю часть сайта, использует стандартный скролинг. Чтобы пользователь перенаправлялся в верхнюю часть страницы автоматически, разработчики и админы сайтов, думающие о своих посетителях, как раз и используют различные вариации кнопок «Вернуться Наверх». Это могут быть самые простые решения без задействования каких-либо дополнительных библиотек или скриптов, а так же с расширенным функционалом, с подключением библиотеки и небольшого исполняющего скрипта.

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

Сегодня, на простом примере, рассмотрим, как с помощью анимации CSS можно добавить немного движухи для всплывающей кнопки «Вернуться Наверх» и попутно разберём сам скрипт содержащий события jQuery, необходимые для функционирования кнопки.
 
Кнопка Вернуться Наверх

Чтобы задействовать кнопку на своем сайте, нет необходимости добавлять какие либо теги в разметку HTML страницы. Достаточно подключить библиотеку jQuery и прописать небольшой исполняемый js, и кнопка будет работать. Оформление внешнего вида и анимацию сформируем с помощью CSS, подключив файл стилей style.css к документу html.
 

Javascript jQuery

И так, если у вас на сайте, ещё не подключена библиотека jQuery, это легко сделать, подключив актуальную версию напрямую из сети доставки контента (CDN) Google, для этого достаточно, перед закрывающим тегом </body> прописать следующую строку:
 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

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

    <script>
        jQuery(document).ready(function($){
        var
        //скорость прокрутки к началу страницы
        speed = 500,
        //html-разметка кнопки
        $scrollTop = $('<a href="#" title="Быстро вернуться наверх" class="scrollTop"><i class="fa fa-angle-double-up"></i></a>').appendTo('body');        
        $scrollTop.click(function(e){
            e.preventDefault();
            $( 'html:not(:animated),body:not(:animated)' ).animate({ scrollTop: 0}, speed );
        });
        //настройка режима появления кнопки
        function show_scrollTop(){
            ( $(window).scrollTop() > 300 ) ? $scrollTop.fadeIn(600) : $scrollTop.fadeOut(600);
        }
        $(window).scroll( function(){ show_scrollTop(); } );
        show_scrollTop();
        });
    </script>

Добавил в скрипт некоторые комментарии, так сказать, для большего понимания. Как писал выше, данный метод исключает необходимость добавлять какие-либо теги в разметку HTML страницы, с этим прекрасно справляется скрипт. Когда пользователь прокрутит страницу вниз на 300px, плагин пропишет тег кнопки, в нашем случае это:

<a href="#" title="Быстро вернуться наверх" class="scrollTop"><i class="fa fa-angle-double-up"></i></a>

в тело страницы, всё там же перед закрывающим тегом </body>.

Для плавного появления и скрытия кнопки используем функции .fadeIn () и .fadeOut () с заданной скоростью 600 миллисекунд. Скорость прокрутки к началу страницы выставляем в значении 500 миллисекунд.
 

CSS

Для разметки кнопки использовал тег <a>, ссылку в адрес которой, прописал хеш(решётка), атрибут title — при наведении на кнопку будет выводится стандартная подсказка, присвоил определённый класс с именем селектора scrollTop, а в качестве анкора ссылки применил шрифт-иконку из пакета Font Awesome <i class="fa fa-angle-double-up"></i>.
Теперь, зная имя селектора, непосредственно в CSS, с помощью определённых свойств, оживим нашу кнопку, сформируем внешний вид, определим место появления на странице, а так же прикрутим анимацию.
Внутри кода css, практически каждому свойству, добавил подробные комментарии, так что не вижу смысла расписывать всё подробно, отдельно остановлюсь на эффекте анимации и подключении шрифт- иконок в качестве элемента кнопки.
Иконка может быть и другая, не такая как в примере, главное чтобы она соответствовала прямому назначению кнопки, в нашем случае, это любой указательный символ, например, одиночные стрелки, объёмные или тонкие, с заливкой или без, явно указывающие направление прокрутки при нажатии на кнопку.
Для того чтобы использовать иконки Font Awesome, нет необходимости загружать весь пакет, существует возможность подключения библиотеки напрямую, например с Bootstrap CDN, для этого в HTML, в разделе

, достаточно прописать следующую строку:

<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">

После подключения Font Awesome, вы можете использовать их в коде HTML или, как в нашем случае в js, с помощью специальных классов, базового fa и класса для определённого типа иконки, у нас это fa-angle-double-up. Узнать класс той или иной иконки можно на сайте Font Awesome.
Внешний вид контейнера иконки, размер и цвет фона, позиционирование, цвет и размер шрифта, всё это определяем уже непосредственно в css, ориентируясь на селектор .scrollTop i

/* формируем тело кнопки, положение и эффект перехода */
 
.scrollTop {
/* по-умолчанию скрыта */
    display: none;
/* скругяем углы */
    -webkit-border-radius: 100%;
    -moz-border-radius: 100%;
    -ms-border-radius: 100%;
    border-radius: 100%;
/* фиксируем позицию кнопки */
    position: fixed;
/* размеры кнопки */   
    width: 60px;
    height: 60px;
/* положение кнопки */
    right: 1rem;
    bottom: 1rem;
/* вид курсора */
    cursor: pointer;
/* эффект перехода между двумя состояниями кнопки */
    -webkit-transition: bottom 0.2s cubic-bezier(0.42, 0, 0.58, 1);
    -moz-transition: bottom 0.2s cubic-bezier(0.42, 0, 0.58, 1);
    -ms-transition: bottom 0.2s cubic-bezier(0.42, 0, 0.58, 1);
    -o-transition: bottom 0.2s cubic-bezier(0.42, 0, 0.58, 1);
    transition: bottom 0.2s cubic-bezier(0.42, 0, 0.58, 1)
}
/* смещение кнопки вверх при наведении */
 
.scrollTop:hover {
    bottom: 2rem
}
 
/* дополнительные элементы офрмления кнопки */
 
.scrollTop:before,
.scrollTop:after {
    content: "";
    top: 0;
    left: 0;
    background-color: #766DCC;
    width: 60px;
    height: 60px;
    -webkit-border-radius: 100%;
    -moz-border-radius: 100%;
    -ms-border-radius: 100%;
    border-radius: 100%;
    -webkit-animation-fill-mode: both;
    -moz-animation-fill-mode: both;
    animation-fill-mode: both;
    position: absolute;
    opacity: 0;
}
 
/* определяем имя, тип и скорость анимации лля :before */
.scrollTop:before {
    background-color: #736cad;
    -webkit-animation: clickMe 1.8s 333ms infinite ease-out;
    -moz-animation: clickMe 1.8s 333ms infinite ease-out;
    animation: clickMe 1.8s 333ms infinite ease-out
}
 
/* определяем имя, тип и скорость анимации лля :after */
.scrollTop:after {
    -webkit-animation: clickMe 1.8s 777ms infinite ease-out;
    -moz-animation: clickMe 1.8s 777ms infinite ease-out;
    animation: clickMe 1.8s 777ms infinite ease-out
 }
 
/* формируем вид иконки */
.scrollTop i {
    width: 30px;
    height: 30px;
    display: block;
    background: rgba(28, 144, 243, 0.61);
    color: #fff;
    text-align: center;
    line-height: 30px;
    font-size: 1.3rem;
    background-size: 12px;
    -webkit-border-radius: 100%;
    -moz-border-radius: 100%;
    -ms-border-radius: 100%;
    border-radius: 100%;
    position: absolute;
    left: 15px;
    top: 15px;
    z-index: 100
}
 
/* анимация */
 @-webkit-keyframes clickMe {
    0% {
        opacity: 0;
        -webkit-transform: scale(0)
    }
    5% {
        opacity: 1
    }
    100% {
        opacity: 0
    }
 }
 
 @-moz-keyframes clickMe {
    0% {
       opacity: 0;
       -moz-transform: scale(0)
    }
    5% {
       opacity: 1
    }
    100% {
        opacity: 0
    }
 }
 
 @keyframes clickMe {
    0% {
        opacity: 0;
        -webkit-transform: scale(0);
        -moz-transform: scale(0);
        -ms-transform: scale(0);
        -o-transform: scale(0);
        transform: scale(0)
    }
    5% {
        opacity: 1
    }
    100% {
        opacity: 0
    }
 }

Осталось рассмотреть саму анимацию. Эффект анимации применён не ко всей кнопке, а к дополнительным псевдоэлементам :after и :before. Чтобы создать CSS-анимацию необходимо добавить в стили этих элементов свойство animation, что позволит определить имя, настроить ускорение и продолжительность анимации, а также другие детали того, как анимация должна протекать. Внешний вид анимации настраивается с помощью @keyframes, набора ключей настраивающего кадры анимации.

В нашем примере имя анимации: clickMe, длительность: 1.8s, задержка: 333ms для :before и 777ms для псевдоэлемента :after. Так же определяем количество повторении анимации — бесконечное infinite и тип анимации ease-out — ускорение в начале.

После того, как мы настроили временные свойства анимации, остаётся определить внешний вид анимации, делается это внутри блока @keyframes. Сначала задается имя анимации, а затем внутри фигурных скобок описываются её шаги. Из примера кода видно, что используются кадры свойства opacity(прозрачность) и трансформации элемента transform с функцией scale — масштаб элемента. Шаги анимации заданы через проценты.
Анимация CSS свойств описана отдельно для webkit-браузеров @-webkit-keyframes и браузера Mozilla Firefox @-moz-keyframes, дабы исключить некорректное отображение анимации в этих веб-браузерах.

На этом всё. Ещё раз просмотрите живой пример работы кнопки «Вернуться наверх» и если оно вам надо, скачивайте исходники упакованные в архив и выложенные в облако на Я.Диске.

С Уважением, Андрей .

Буду всем признателен, если поддержите проект — добавив блог в исключения AdBlock и поделитесь ссылкой на запись в своих соц-сетях:

Всего комментариев: 2

  • Катерина: 16 ноября, 2017 в 23:52

    Спасибо большое! Доходчиво и красиво)

    Ответить
  • Spresher: 16 апреля, 2019 в 20:21

    Thank you!

    Ответить

Оставить комментарий

Ваш email не будет опубликован.

Вы можете использовать следующие HTML тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>