После установки Headroom.js первым этапом становится проверка корректности подключения файлов. Библиотека может быть подключена несколькими способами:
Пример подключения через CDN:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
При использовании сборщиков:
npm install headroom.js
import Headroom from "headroom.js";
Ключевой момент проверки: библиотека должна быть доступна в области видимости.
Для CDN:
console.log(typeof Headroom);
Ожидаемый результат:
function
Если вывод undefined, значит скрипт не подключён или
подключён с ошибкой (например, неправильный путь или порядок
загрузки).
Headroom работает с конкретным элементом (чаще всего это
header). Перед инициализацией важно убедиться, что элемент
существует в DOM.
const header = document.querySelector("header");
console.log(header);
Если результат:
null
— элемент не найден. Возможные причины:
Решение — отложить выполнение:
document.addEventListener("DOMContentLoaded", function () {
const header = document.querySelector("header");
console.log(header);
});
После получения элемента выполняется создание экземпляра:
const headroom = new Headroom(header);
headroom.init();
Для проверки корректности:
console.log(headroom);
Экземпляр должен содержать свойства:
optionsclassesstatetoleranceoffsetЕсли объект пустой или возникает ошибка — проблема в подключении или передаче аргумента.
Headroom управляет состоянием элемента через CSS-классы. После инициализации при прокрутке страницы должны добавляться классы:
headroomheadroom--pinnedheadroom--unpinnedheadroom--topheadroom--not-topПроверка осуществляется через инструменты разработчика (DevTools) или программно:
window.addEventListener("scroll", () => {
console.log(header.className);
});
При прокрутке вниз должен появляться:
headroom headroom--unpinned
При прокрутке вверх:
headroom headroom--pinned
Если классы не меняются:
init()Headroom реагирует на событие scroll. Проверка его
срабатывания:
window.addEventListener("scroll", () => {
console.log("scroll работает");
});
Если сообщения не появляются:
overflow: hidden)В случае кастомного контейнера необходимо указать его:
const headroom = new Headroom(header, {
scroller: document.querySelector(".scroll-container")
});
Без CSS визуальный эффект не проявляется, даже если библиотека работает корректно. Минимальный набор стилей:
.headroom {
transition: transform 0.3s ease;
}
.headroom--pinned {
transform: translateY(0%);
}
.headroom--unpinned {
transform: translateY(-100%);
}
Проверка:
Если изменений нет:
Headroom позволяет настраивать поведение. Ошибки в конфигурации могут создавать ощущение неработающей библиотеки.
Пример:
const headroom = new Headroom(header, {
offset: 100,
tolerance: 5
});
Проверка:
offset — расстояние прокрутки до начала реакцииtolerance — чувствительностьДля диагностики можно уменьшить значения:
offset: 0,
tolerance: 0
Это позволит убедиться, что библиотека реагирует мгновенно.
Headroom хранит текущее состояние:
console.log(headroom.state);
Возможные значения:
"pinned""unpinned""top""notTop"Отсутствие изменений состояния при прокрутке указывает на проблему с событиями или инициализацией.
Некоторые библиотеки могут:
Диагностика:
Headroom должен подключаться:
DOMContentLoaded)Неправильный порядок:
<script src="app.js"></script>
<script src="headroom.min.js"></script>
Правильный:
<script src="headroom.min.js"></script>
<script src="app.js"></script>
Ошибки JavaScript напрямую влияют на работу библиотеки. Проверка:
Типичные ошибки:
Headroom is not definedCannot read property '...' of nullЛюбая ошибка до инициализации Headroom может остановить выполнение скрипта.
Полностью рабочая проверочная конфигурация:
<!DOCTYPE html>
<html>
<head>
<style>
body {
height: 2000px;
margin: 0;
}
header {
position: fixed;
width: 100%;
height: 60px;
background: #333;
color: white;
}
.headroom {
transition: transform 0.3s ease;
}
.headroom--pinned {
transform: translateY(0%);
}
.headroom--unpinned {
transform: translateY(-100%);
}
</style>
</head>
<body>
<header>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>
Если этот пример работает, проблема находится в исходном проекте: конфликты, структура DOM или стили.
1. Ничего не происходит
init()2. Ошибка в консоли
3. Классы добавляются, но визуально нет изменений
4. Работает нестабильно
offset или
toleranceconsole.log() для проверки значенийКомплексная проверка всех уровней — подключения, DOM, инициализации, событий и стилей — позволяет точно определить причину некорректной работы Headroom.js.