Современная веб-разработка требует инновационных подходов для обеспечения гибкого, интерактивного и бесперебойного взаимодействия с пользователем. Svelte Actions, важная функция платформы Svelte, стала для разработчиков бесценным инструментом для создания надежных, динамических веб-приложений.
Действия Svelte — это, по сути, пользовательское поведение, которое можно легко прикрепить к любому элементу DOM. Они предоставляют высокоэффективный способ расширить функциональность элемента, не загромождая кодовую базу повторяющимся шаблонным кодом.
Возьмем, к примеру, обычную потребность обнаруживать клики за пределами определенного элемента — функцию, которая часто требуется для модальных окон или раскрывающихся меню. До появления Svelte Actions для достижения этой цели требовалась путаница прослушивателей событий и условной логики. Но теперь, благодаря Svelte Actions, это совсем несложно.
Давайте углубимся в код, чтобы понять, как работает действие onClickOutside
.
export function onClickOutside(node, handler) { const handleClick = (event) => { if (node && !node.contains(event.target) && !event.defaultPrevented) { handler(event); } }; document.addEventListener("click", handleClick); return { destroy() { document.removeEventListener("click", handleClick); } }; }
В этом действии функция onClickOutside
— это экспортированная функция, которая принимает два аргумента: node
, который относится к элементу DOM, к которому прикреплено действие, и handler
, который является функцией обработчика событий, выполняемой при обнаружении щелчка за пределами элемента.
Внутри функции мы определяем функцию handleClick
. Эта функция проверяет, находится ли node
по-прежнему в DOM, находится ли выбранная цель (event.target
) в пределах node
и не было ли событие предотвращено другими прослушивателями (через event.defaultPrevented
). Если все эти условия соблюдены, функция handler
вызывается с объектом события.
Затем мы прикрепляем функцию handleClick
к глобальному событию щелчка по document
. Таким образом, любой щелчок на странице вызовет функцию, позволяющую нам проверить, произошел ли щелчок за пределами определенного элемента.
Наконец, функция onClickOutside
возвращает объект с помощью метода destroy
. Этот метод удаляет прослушиватель событий, когда…