Современная веб-разработка требует инновационных подходов для обеспечения гибкого, интерактивного и бесперебойного взаимодействия с пользователем. 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. Этот метод удаляет прослушиватель событий, когда…