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
Freigeben: 2024-12-28 08:45:10
Original
721 Leute haben es durchsucht

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;
Nach dem Login kopieren

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;

Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage