Локальное использование библиотеки предполагает загрузку файлов напрямую в проект без обращения к CDN. Такой подход обеспечивает полный контроль над версией, повышает стабильность работы и устраняет зависимость от внешних источников.
Headroom.js распространяется в виде JavaScript-файла, который можно скачать из официального репозитория или через пакетные менеджеры.
После загрузки архива или установки через менеджер пакетов в проекте появляются основные файлы:
headroom.js — исходный (не минифицированный) файлheadroom.min.js — оптимизированная версия для
продакшенаДля локального подключения в браузере используется именно
.js или .min.js файл.
Обычно библиотека размещается в отдельной директории, например:
project/
│
├── js/
│ ├── headroom.min.js
│ └── app.js
│
├── css/
│ └── styles.css
│
└── index.html
Такое разделение облегчает поддержку и масштабирование проекта.
Файл библиотеки подключается стандартным тегом
<script>:
<script src="js/headroom.min.js"></script>
Рекомендуется подключать скрипт перед закрывающим тегом
</body>, чтобы избежать блокировки рендеринга
страницы:
<body>
<!-- контент -->
<script src="js/headroom.min.js"></script>
<script src="js/app.js"></script>
</body>
Порядок подключения важен: сначала библиотека, затем пользовательский код.
После подключения необходимо создать экземпляр Headroom и указать элемент, к которому он будет применяться.
Пример:
var header = document.querySelector("header");
var headroom = new Headroom(header);
headroom.init();
В данном случае библиотека будет управлять поведением элемента
<header>.
Headroom отслеживает прокрутку страницы и автоматически добавляет или удаляет CSS-классы:
headroom--pinned — элемент видимheadroom--unpinned — элемент скрытheadroom--top — пользователь находится в верхней части
страницыheadroom--not-top — пользователь прокрутил страницу
внизЭти классы используются для анимации и стилизации.
Без CSS библиотека не будет визуально проявляться. Минимальный пример:
header {
transition: transform 0.3s ease;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0);
}
Такая настройка скрывает шапку при прокрутке вниз и показывает при прокрутке вверх.
При локальном использовании доступна полная конфигурация:
var headroom = new Headroom(header, {
offset: 100,
tolerance: {
up: 10,
down: 5
},
classes: {
pinned: "header-visible",
unpinned: "header-hidden"
}
});
Ключевые параметры:
offset — расстояние прокрутки до активацииtolerance — чувствительность к прокруткеclasses — кастомные имена CSS-классовHeadroom можно применять к нескольким элементам:
var elements = document.querySelectorAll(".headroom");
elements.forEach(function(el) {
var instance = new Headroom(el);
instance.init();
});
Каждый элемент получает собственный экземпляр и независимое поведение.
При локальной разработке часто используются сборщики (Webpack, Vite, Parcel). В этом случае библиотека подключается как модуль.
Установка:
npm install headroom.js
Импорт:
import Headroom from "headroom.js";
const header = document.querySelector("header");
const headroom = new Headroom(header);
headroom.init();
Это позволяет интегрировать библиотеку в современную архитектуру приложения.
Преимущества:
Недостатки:
Для повышения производительности:
headroom.min.jsdefer:<script src="js/headroom.min.js" defer></script>
Если библиотека не работает, проверяются:
Пример проверки:
console.log(typeof Headroom);
Если результат "function", библиотека подключена
корректно.
Локальная версия позволяет:
Например, можно отслеживать события:
var headroom = new Headroom(header, {
onPin: function() {
console.log("Показано");
},
onUnpin: function() {
console.log("Скрыто");
}
});
При локальном использовании в React, Vue или других фреймворках библиотека подключается как зависимость и инициализируется в жизненных циклах компонентов.
Пример (React):
useEffect(() => {
const header = document.querySelector("header");
const headroom = new Headroom(header);
headroom.init();
return () => headroom.destroy();
}, []);
Важно корректно уничтожать экземпляр, чтобы избежать утечек памяти.
Headroom предоставляет методы:
init() — запускdestroy() — остановкаfreeze() — временная блокировкаunfreeze() — возобновление работыПример:
headroom.freeze();
headroom.unfreeze();
Это полезно при динамических изменениях интерфейса.
Локальный код позволяет полностью контролировать поведение:
var headroom = new Headroom(header, {
offset: 200,
tolerance: 0,
onTop: function() {
header.classList.add("at-top");
},
onNotTop: function() {
header.classList.remove("at-top");
}
});
Такая настройка добавляет дополнительные состояния интерфейса.
Типичный кейс — скрывающаяся навигационная панель:
Это улучшает UX и экономит пространство экрана.
Рекомендуемая структура:
js/
├── vendor/
│ └── headroom.min.js
├── modules/
│ └── header.js
└── main.js
Файл header.js:
export function initHeader() {
const header = document.querySelector("header");
if (!header) return;
const headroom = new Headroom(header);
headroom.init();
}
Файл main.js:
import { initHeader } from "./modules/header.js";
initHeader();
Такой подход делает код масштабируемым и поддерживаемым.
Headroom корректно работает на мобильных устройствах, но может потребоваться дополнительная настройка:
var headroom = new Headroom(header, {
tolerance: {
up: 5,
down: 0
}
});
Это повышает отзывчивость на сенсорных устройствах.
Headroom.js:
requestAnimationFrameПри использовании локальной версии важно учитывать поддержку браузеров в проекте.
Процесс обновления:
headroom.min.jsПри использовании npm:
npm update headroom.js
Если используется исходный файл, его можно минифицировать:
uglifyjs headroom.js -o headroom.min.js
Однако обычно предпочтительно использовать уже готовую минифицированную версию.
Локальное хранение библиотеки:
Это особенно важно в корпоративных проектах.
<script>Такой подход обеспечивает гибкое и полностью контролируемое использование Headroom.js в любом веб-проекте.