Headroom.js — это лёгкая библиотека JavaScript, предназначенная для управления видимостью верхних панелей (header) при прокрутке страницы. Одним из ключевых аспектов её использования является обеспечение обратной совместимости с различными браузерами и версиями JavaScript, чтобы интерфейс корректно работал как на современных, так и на устаревших платформах.
Headroom.js разработан с учётом широкого спектра браузеров. Основные моменты:
Современные браузеры: Google Chrome, Firefox, Edge, Safari полностью поддерживают все функции Headroom.js, включая анимации на CSS и события scroll.
Старые браузеры: Для Internet Explorer 9 и выше
возможна базовая работа библиотеки, однако некоторые эффекты, например
transform с плавной анимацией через CSS, могут требовать
полифиллов. Рекомендуется использовать полифилл
requestAnimationFrame, чтобы поддержка анимации была
стабильной:
(function() {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
|| window[vendors[x]+'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame)
window.requestAnimationFrame = function(callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
};
}());Мобильные браузеры: iOS Safari и Android WebView корректно поддерживают события прокрутки. На старых устройствах может потребоваться оптимизация частоты вызова колбэков scroll для предотвращения лагов.
Headroom.js написан на ES5, что обеспечивает совместимость с большинством сред исполнения. Важные аспекты:
ES5-совместимый синтаксис: отсутствуют
стрелочные функции, const и let (хотя в
современных сборках могут использоваться через транспайлер
Babel).
Полифиллы для методов массива: если требуется
работа с Array.prototype.forEach, map или
filter в старых браузерах, необходимо подключить
полифилл.
EventListener: поддержка событий через
addEventListener доступна с IE9 и выше; для IE8
используется attachEvent. Для полной обратной совместимости
можно написать адаптер:
function addEvent(elem, type, callback) {
if (elem.addEventListener) {
elem.addEventListener(type, callback, false);
} else if (elem.attachEvent) {
elem.attachEvent('on' + type, callback);
}
}Headroom.js опирается на CSS-классы для скрытия и показа header. Для старых браузеров рекомендуется:
top: -100px вместо
transform: translateY(-100%) при невозможности применения
CSS3-трансформаций.-webkit-, -moz-,
-ms- для CSS-трансформаций, чтобы обеспечить корректную
анимацию в Safari и старых Firefox.Пример CSS с префиксами:
.headroom--pinned {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
transform: translateY(0);
transition: transform 0.2s ease-in-out;
}
.headroom--unpinned {
-webkit-transform: translateY(-100%);
-moz-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
transition: transform 0.2s ease-in-out;
}
Для тестирования корректности работы Headroom.js в разных средах рекомендуется:
typeof
или in перед вызовом.Headroom.js, при соблюдении этих правил, сохраняет стабильную работу на широком спектре браузеров, обеспечивая плавное скрытие и появление верхней панели без ошибок и сбоев на старых устройствах.