Heim >Web-Frontend >js-Tutorial >Schließende Modalitäten oder Dropdown-Menüs zum Klicken oder Scrollen von außen.

Schließende Modalitäten oder Dropdown-Menüs zum Klicken oder Scrollen von außen.

Patricia Arquette
Patricia ArquetteOriginal
2024-12-28 08:45:10731Durchsuche

Closing modals or dropdown on Outside click or scroll.

Haben Sie jemals ein modales oder Dropdown-Menü erstellt und hatten Schwierigkeiten, herauszufinden, wie es geschlossen werden kann, wenn der Benutzer außerhalb davon klickt? Ja...

Hier ist ein cooler Reaktionshaken für dich, der damit umgehen kann

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;

Dieser Hook verwendet useRef, um auf ein DOM-Element abzuzielen, und löst einen Rückruf bei externen Klicks oder Scroll-Ereignissen aus, um eine ordnungsgemäße Bereinigung mit useEffect sicherzustellen. Es gibt die Referenz zum einfachen Anhängen an jedes DOM-Element zurück.

Hier ist eine Beispielverwendung

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;

Das obige ist der detaillierte Inhalt vonSchließende Modalitäten oder Dropdown-Menüs zum Klicken oder Scrollen von außen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn