【发布时间】:2020-10-28 06:18:34
【问题描述】:
我正在尝试添加一个在将鼠标悬停在 div 上时会延迟显示的模式。但是,它变得有点棘手,因为例如,如果超时间隔为 1000 毫秒,并且您将鼠标悬停在所述 div 上,然后在 1000 毫秒内悬停在远离该 div 的位置,模态仍然会显示。我想要发生的是,模式在延迟(例如 1000 毫秒)仅后显示,如果您在该延迟期间将鼠标悬停在 div 上。如何创建这种效果而不是我现在看到的副作用?谢谢!
index.tsx:
import * as React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const Modal: React.FC = () => {
const divRef = React.useRef<HTMLDivElement>(null);
const [showModal, setShowModal] = React.useState<boolean>(false);
React.useEffect(() => {
const divNode = divRef.current;
const handleEvent = (event: Event): void => {
if (divNode) {
if (divNode.contains(event.target as Node)) {
setTimeout(() => setShowModal(true), 1000);
} else {
setShowModal(false);
}
}
};
document.addEventListener("mouseover", handleEvent);
return () => {
document.removeEventListener("mouseover", handleEvent);
};
}, [divRef]);
return (
<div className="container">
<div className="div" ref={divRef}>
Hover Me
</div>
{showModal && <div className="modal">modal</div>}
</div>
);
};
const App: React.FC = () => (
<>
<Modal />
<Modal />
<Modal />
<Modal />
</>
);
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
【问题讨论】:
标签: javascript html css reactjs typescript