Принцип работы библиотеки Headroom.js, реализующей этот шаблон, очень прост — в ответ на начало скроллинга меняются CSS-классы панели, делая её видимой или невидимой. У библиотеки есть API как для чистого JavaScript, так и для jQuery/Zepto и AngularJS.
Использование
Чистый JS:
// находим элемент var myElement = document.querySelector("header"); // создаём экземпляр Headroom, передавая в конструктор найденный элемент var headroom = new Headroom(myElement); // инициализируем экземпляр headroom.init();
jQuery/Zepto:
// Проще некуда! // init() вызывается неявно $("header").headroom();
При использовании модуля data возможен и чисто декларативный стиль:
<!-- выбирается элемент $("[data-headroom]") --> <header data-headroom>
AngularJS:
<header headroom></header> <!-- или --> <headroom></headroom> <!-- или с опциями --> <headroom tolerance='0' offset='0' classes="{pinned:'headroom--pinned',unpinned:'headroom--unpinned',initial:'headroom'}"></headroom>
Опции
Для управления поведением Headroom.js предусмотрены опции. Их немного, а структура объекта опций выглядит так:
{ // вертикальное смещение в пикселях, при котором панель "отцепляется" offset : 0, // допуск в пикселях, в пределах которого состояние не меняется tolerance : 0, // допуск также можно задать отдельно для прокрутки вверх или вниз tolerance : { down : 0, up : 0 }, // Применяемые классы CSS classes : { // при инициализации элемента initial : "headroom", // при прокрутке вверх pinned : "headroom--pinned", // при прокрутке вниз unpinned : "headroom--unpinned", // выше вертикального смещения top : "headroom--top", // ниже вертикального смещения notTop : "headroom--not-top" }, // callback при фиксации элемента, здесь и далее this указывает на элемент onPin : function() {}, // callback при отцеплении onUnpin : function() {}, // callback при попадании выше вертикального смещения onTop : function() {}, // callback при попадании ниже вертикального смещения onNotTop : function() {} }
Пример использования стилей
.headroom { transition: transform 200ms linear; } .headroom--pinned { transform: translateY(0%); } .headroom--unpinned { transform: translateY(-100%); }
Вот и всё. Поиграть с параметрами и стилями можно на демонстрационной странице. Библиотека распространяется под лицензией MIT. Автор Headroom.js — веб -разработчик Ник Вильямс, ему также принадлежит ещё один весьма популярный проект — библиотека enquire.js для работы с media queries.
ссылка на оригинал статьи http://habrahabr.ru/post/224787/
Добавить комментарий