Борясь с нехваткой вертикального пространства, дизайнеры интерфейсов Google Android придумали новый паттерн Quick Return (быстрый возврат).
Принцип работы данного паттерна предельно прост: при скроллинге вниз верхняя панель приложения скрывается, при скроллинге вверх — вновь показывается.
Что такое headroom.js
headroom.js — легковесный виджет, написанный на чистом JavaScript, реагирующий на скроллинг контента. Он просто переключет CSS-классы.
Как работает headroom.js
Скрипт просто добавляет и удаляет CSS-классы в ответ на событие прокрутки.
<!-- Инициализация --> <header class="headroom"></header> <!-- Прокрутка вниз --> <header class="headroom headroom--unpinned"></header> <!-- Прокрутка вверх --> <header class="headroom headroom--pinned"></header>
Опираясь на классы CSS, headroom.js даёт нам невероятную гибкость. Всё зависит от полёта вашей фантазии. К элементу можно применить абсолютно любые CSS-свойства: анимацию, наклоны, повороты..
Как использовать hradroom.js
Использовать headroom.js очень просто. Он имеет API на чистом JavaScript и плагины для jQuery/Zepto/AngularJS.
На обычном JavaScript
Подключите скрипт headroom.js на вашу страницу и потом:
// получение элемента
var myElement = document.querySelector("header");
// запуск конструктора
var headroom = new Headroom(myElement);
// инициализация
headroom.init();
На jQuery/Zepto
Подключите скрипты headroom.js и jQuery.headroom.js на вашу страницу и потом:
$(function() {
$("#header").headroom();
});
Плагин также можно инициализировать при помощи data атрибутов:
<!-- $("[data-headroom]") -->
<header data-headroom></header>
Для правильной работы с Zepto необходимо подключить модуль data.
На AngularJS
Подключите скрипты headroom.js и angular.headroom.js на вашу страницу и потом:
<header headroom></header>
<!-- или -->
<headroom></headroom>
<!-- или с настройкми -->
<headroom tolerance='0' offset='0' classes="{pinned:'headroom--pinned',unpinned:'headroom--unpinned',initial:'headroom'}"></headroom>
Настройки hradroom.js
Headroom.js также можно настроить, передав в его конструктор объект опций. Настройки по умолчанию хранятся в Headroom.options. Структура объекта настроек:
{
offset : 0,
tolerance : 0,
tolerance : {
up : 5,
down : 0
},
classes : {
initial : "headroom",
pinned : "headroom--pinned",
unpinned : "headroom--unpinned",
top : "headroom--top",
notTop : "headroom--not-top"
},
onPin : function() {},
onUnpin : function() {},
onTop : function() {},
onNotTop : function() {}
}
CSS
В самом простом варианте CSS может выглядеть так:
.headroom--pinned {
display: block;
}
.headroom--unpinned {
display: none;
}
Здесь мы просто показываем или скрываем блок с классом .headroom. Либо можно пойти дальше и задействовать анимацию из CSS3:
.headroom {
-webkit-transition: all .25s ease-in-out;
-moz-transition: all .25s ease-in-out;
transition: all .25s ease-in-out;
}
.headroom--pinned {
-moz-transform: translateY(0%);
-webkit-transform: translateY(0%);
transform: translateY(0%);
}
.headroom--unpinned {
-moz-transform: translateY(-100%);
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
Потрясающих эффектов можно добиться, подключив Animate.css — набор кроссбраузерных CSS3 анимаций.
Поддержка браузерами
Headroom.js зависит от следующих API браузера:
Все эти API можно эмулировать при помощи полифилов для успешной работы в старых версиях браузеров.
Примеры
Скачать hradroom.js
Источник: https://www.kobzarev.com/programming/pattern-quick-return-pri-pomoshhi-headroom-js/