Подключение через CDN — самый быстрый способ начать работу с библиотекой Headroom.js без установки зависимостей и настройки сборщиков. Скрипт загружается напрямую с удалённого сервера и сразу доступен в браузере.
Для подключения используется тег <script>,
размещённый перед закрывающим тегом </body> или в
<head> с атрибутом defer.
Пример подключения с CDN:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
Альтернативные CDN:
<script src="https://cdn.jsdelivr.net/npm/headroom.js@0.12.0/dist/headroom.min.js"></script>
Ключевые моменты:
@0.12.0).min.js) для
оптимальной загрузкиHeadroomHeadroom.js управляет видимостью элемента (обычно шапки сайта). Для этого требуется элемент, к которому будет применяться поведение.
Пример:
<header id="header">
<h1>Сайт</h1>
</header>
Важно:
<header>, но возможны
любые блокиПосле загрузки библиотеки необходимо создать экземпляр Headroom и привязать его к элементу.
<script>
const header = document.querySelector("#header");
const headroom = new Headroom(header);
headroom.init();
</script>
Что происходит:
HeadroomHeadroom.js управляет состояниями через классы, которые автоматически добавляются и удаляются.
Основные классы:
headroom — базовый классheadroom--pinned — элемент закреплён (виден)headroom--unpinned — элемент скрытheadroom--top — страница в самом верхуheadroom--not-top — страница прокручена внизПример базовой стилизации:
.headroom {
transition: transform 0.3s ease;
}
.headroom--pinned {
transform: translateY(0%);
}
.headroom--unpinned {
transform: translateY(-100%);
}
Поведение:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Headroom CDN</title>
<style>
body {
margin: 0;
height: 2000px;
}
#header {
position: fixed;
top: 0;
width: 100%;
background: #333;
color: white;
padding: 20px;
}
.headroom {
transition: transform 0.3s ease;
}
.headroom--pinned {
transform: translateY(0%);
}
.headroom--unpinned {
transform: translateY(-100%);
}
</style>
</head>
<body>
<header id="header">Навигация</header>
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
<script>
const header = document.querySelector("#header");
const headroom = new Headroom(header);
headroom.init();
</script>
</body>
</html>
Headroom поддерживает конфигурацию через объект настроек:
const headroom = new Headroom(header, {
offset: 100,
tolerance: {
up: 5,
down: 0
},
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned"
}
});
Описание параметров:
offset — расстояние прокрутки перед активацией поведения
tolerance — чувствительность к скроллу
up — при прокрутке вверхdown — при прокрутке внизclasses — переопределение CSS-классов
Чтобы избежать блокировки рендеринга страницы:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js" defer></script>
Особенности:
<body>При использовании CDN важно учитывать сетевые ошибки. Простейшая проверка:
if (typeof Headroom !== "undefined") {
const headroom = new Headroom(document.querySelector("#header"));
headroom.init();
}
Это предотвращает ошибки, если библиотека не загрузилась.
Иногда используется резервная загрузка:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
<script>
if (typeof Headroom === "undefined") {
document.write('<script src="/js/headroom.min.js"><\/script>');
}
</script>
Таким образом:
Критически важно соблюдать порядок:
Нарушение порядка приводит к ошибкам:
Headroom is not definedCannot read property of nullЭлемент не найден
const header = document.querySelector("#header");
Причина:
Решение:
document.addEventListener("DOMContentLoaded", function () {
const header = document.querySelector("#header");
const headroom = new Headroom(header);
headroom.init();
});
Нет анимации
Причина:
Решение:
transform и transitionЭлемент не фиксирован
Причина:
position: fixedРешение:
#header {
position: fixed;
}
Подключение через CDN подходит в случаях:
При масштабировании проекта обычно переходят на пакетные менеджеры и сборщики, обеспечивающие больший контроль над зависимостями и производительностью.