我有一张照片,它显示一个覆盖时,悬停。
一切工作正常,但如果我beeing快速与鼠标(从顶部到底部的网页为例),覆盖将显示当我通过悬停的照片,但不会隐藏时,悬停完成。
以下是我尝试的:
- 不同的事件处理程序,如
onMouseEnter
和onMouseLeave
,onMouseOver
和onMouseOut
,都带有onFocus
和onBlur
- 条件CSS类:
${!isHover && 'hidden'}
但总是得到同样的结果。
有什么想法可以改善这一点,使浏览器可以跟随状态的变化?
下面是简化的代码:
const Photo = (): JSX.Element => {
const [isHover, setHover] = useState<boolean>(false);
const LayoutFactory = (): JSX.Element => {
switch (true) {
case archived:
return <ArchiveLayout />;
case Boolean(photo):
return isHover ? (
<HoverLayout />
) : (
<IconPlayOutline />
);
default:
return <></>;
}
};
const MissingImageFactory = (): JSX.Element => {
if (archived) {
return (
<div>
// CONTENT
</div>
);
}
return <MissingImage />;
};
const LayoutWrapper = ({ children }: PropsWithChildren): JSX.Element => {
return (
<div>
{children}
</div>
);
};
const HoverLayout = (): JSX.Element => {
return (
<LayoutWrapper>
// CONTENT
</LayoutWrapper>
);
};
const ArchiveLayout = (): JSX.Element => {
return (
<LayoutWrapper>
<div>
// CONTENT
</div>
</LayoutWrapper>
);
};
const Image = (): JSX.Element => {
return photo ? (
<img
alt="annonce"
src={photo}
/>
) : (
<MissingImageFactory />
);
};
return (
<button
onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)}
{...props}
>
// CONTENT
</button>
);
};
export default Photo;
1条答案
按热度按时间qgelzfjb1#
我认为国家无法跟上事件发生的速度。您可以尝试在几毫秒后检查一次鼠标是否仍在图片上以“修复”它。我真的不喜欢这个解决方案,因为它非常黑客,难以维护,可能会很容易打破。
最好的方法可能是找到一个css的解决方案,因为我认为这是大多数风格相关的问题。它们更容易维护,性能更高。好的老css仍然有很多东西要做:)