ホームページ > ウェブフロントエンド > jsチュートリアル > 外側のクリックまたはスクロールでモーダルまたはドロップダウンを閉じます。

外側のクリックまたはスクロールでモーダルまたはドロップダウンを閉じます。

Patricia Arquette
リリース: 2024-12-28 08:45:10
オリジナル
729 人が閲覧しました

Closing modals or dropdown on Outside click or scroll.

モーダルまたはドロップダウンを作成し、ユーザーがその外側をクリックしたときにそれを閉じる方法を理解するのに苦労したことがありますか?はい。

これに対処できるクールな反応フックを紹介します

import { useEffect, useRef } from "react";

const useOutsideClickOrScroll = <T extends HTMLElement>(
  callback: () => void
) => {
  const ref = useRef<T>(null);

  useEffect(() => {
    const handleClickOutside = (event: MouseEvent) => {
      if (ref.current && !ref.current.contains(event.target as Node)) {
        callback();
      }
    };

    const handleScroll = () => {
      callback();
    };

    document.addEventListener("mousedown", handleClickOutside);
    window.addEventListener("scroll", handleScroll, true);

    return () => {
      document.removeEventListener("mousedown", handleClickOutside);
      window.removeEventListener("scroll", handleScroll, true);
    };
  }, [callback]);

  return ref;
};

export default useOutsideClickOrScroll;
ログイン後にコピー

このフックは useRef を使用して DOM 要素をターゲットにし、外側のクリックまたはスクロール イベントでコールバックをトリガーし、useEffect による適切なクリーンアップを保証します。任意の DOM 要素に簡単に添付できるように ref を返します。

使用例は次のとおりです

import React, { useState } from "react";
import useOutsideClickOrScroll from "./useOutsideClickOrScroll";

const Dropdown = () => {
  const [isOpen, setIsOpen] = useState(false);

  const handleClose = () => {
    setIsOpen(false);
  };

  const ref = useOutsideClickOrScroll<HTMLDivElement>(handleClose);

  return (
    <div>
      <button onClick={() => setIsOpen(!isOpen)}>Toggle Dropdown</button>
      {isOpen && (
        <div ref={ref}>
          <p>Dropdown Content</p>
        </div>
      )}
    </div>
  );
};

export default Dropdown;

ログイン後にコピー

以上が外側のクリックまたはスクロールでモーダルまたはドロップダウンを閉じます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート