css 浏览器悬停事件太慢

cyvaqqii  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(93)

我有一张照片,它显示一个覆盖时,悬停。
一切工作正常,但如果我beeing快速与鼠标(从顶部到底部的网页为例),覆盖将显示当我通过悬停的照片,但不会隐藏时,悬停完成。
以下是我尝试的:

  • 不同的事件处理程序,如onMouseEnteronMouseLeaveonMouseOveronMouseOut,都带有onFocusonBlur
  • 条件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;
qgelzfjb

qgelzfjb1#

我认为国家无法跟上事件发生的速度。您可以尝试在几毫秒后检查一次鼠标是否仍在图片上以“修复”它。我真的不喜欢这个解决方案,因为它非常黑客,难以维护,可能会很容易打破。
最好的方法可能是找到一个css的解决方案,因为我认为这是大多数风格相关的问题。它们更容易维护,性能更高。好的老css仍然有很多东西要做:)

相关问题