Метод disable в библиотеке Waypoints используется для
временного отключения наблюдателя (waypoint), не удаляя его из системы.
Это позволяет приостановить реакцию на прокрутку страницы без потери
конфигурации и обработчиков событий.
Отключённый waypoint:
enable.waypoint.disable();
Метод не принимает аргументов и применяется к конкретному экземпляру waypoint.
При вызове disable происходит:
Важно понимать, что DOM-элемент, к которому привязан waypoint, остаётся неизменным — отключается только логика отслеживания.
var waypoint = new Waypoint({
element: document.getElementById('block'),
handler: function(direction) {
console.log('Сработал waypoint:', direction);
},
offset: '50%'
});
// Отключение waypoint
waypoint.disable();
После вызова disable обработчик handler
больше не будет вызываться при прокрутке страницы.
Для повторной активации используется метод enable:
waypoint.enable();
После этого waypoint снова начнёт отслеживать позицию элемента и вызывать обработчик при достижении точки.
При большом количестве waypoint-объектов возможно снижение производительности. Временное отключение ненужных наблюдателей позволяет снизить нагрузку.
if (window.innerWidth < 768) {
waypoint.disable();
}
В интерфейсах с динамическим поведением удобно отключать waypoint после первого срабатывания:
var waypoint = new Waypoint({
element: document.getElementById('section'),
handler: function() {
console.log('Сработало один раз');
this.disable();
}
});
При работе с анимациями waypoint часто используется как триггер. После завершения анимации дальнейшие срабатывания могут быть нежелательны:
var waypoint = new Waypoint({
element: document.getElementById('animate-block'),
handler: function() {
startAnimation();
this.disable();
}
});
Во время открытия модальных окон или блокировки прокрутки страницы waypoint может мешать логике:
openModal();
waypoint.disable();
После закрытия:
closeModal();
waypoint.enable();
destroyМетод disable часто путают с destroy,
однако между ними есть принципиальная разница:
| Метод | Поведение |
|---|---|
disable |
Временно отключает waypoint |
destroy |
Полностью удаляет waypoint |
После destroy:
Waypoint может входить в группу (group). При отключении:
Это позволяет гибко управлять поведением отдельных элементов без влияния на общую систему.
1. Состояние сохраняется полностью После повторного включения не требуется повторная инициализация.
2. Не влияет на DOM Метод работает исключительно на уровне JavaScript-логики.
3. Безопасность повторного вызова Повторный вызов
disable не вызывает ошибок:
waypoint.disable();
waypoint.disable(); // безопасно
4. Контекст this Внутри обработчика
handler доступен текущий waypoint:
handler: function() {
this.disable();
}
Метод disable часто используется вместе с:
enable() — для управления жизненным циклом;destroy() — для полного удаления;refresh() — при изменении разметки страницы.Пример:
waypoint.disable();
// изменение DOM
Waypoint.refreshAll();
waypoint.enable();
При работе с массивом waypoint:
var waypoints = [];
document.querySelectorAll('.item').forEach(function(el) {
waypoints.push(new Waypoint({
element: el,
handler: function() {
console.log('trigger');
}
}));
});
// Отключение всех
waypoints.forEach(function(wp) {
wp.disable();
});
Ошибка: ожидание удаления waypoint
waypoint.disable();
// разработчик ожидает, что объект удалён
На самом деле waypoint остаётся в памяти.
Ошибка: забытое повторное включение
waypoint.disable();
// enable не вызывается
В результате функциональность может «сломаться».
Ошибка: путаница с destroy
waypoint.destroy();
waypoint.enable(); // не сработает
Метод disable:
В исходном коде это обычно реализуется через изменение флага состояния и работу с менеджером контекста.
disable, когда требуется временная
пауза;disable() — временное отключениеenable() — повторная активацияdestroy() — окончательное удаление