【问题标题】:Best way to change image on hover using GatsbyImage使用 GatsbyImage 更改悬停图像的最佳方法
【发布时间】:2021-11-08 01:26:03
【问题描述】:

我确实希望我的产品图像在鼠标悬停期间发生变化,但由于 GatsbyImage 不支持 onMouseEnter 道具,那么最好的处理方法是什么?

产品图片:

<GatsbyImage
              alt={firstImage?.altText ?? title}
              image={firstImage?.gatsbyImageData ?? storefrontImageData}
              loading={eager ? "eager" : "lazy"}
              className="object-cover object-center w-full h-full group-hover:opacity-75"
            />
          </div>

其中 firstImage 是数组中的第一个对象,secondImage 将是 images 数组中的第二个图像/对象,从 Shopify 中拉取,悬停时需要是活动图像。

我正在考虑一种解决方案,使两个 div 中的每一个都有一个独特的图像,并在悬停时使用 Framer Motion 激活第二个 div 并为其设置动画(使用条件渲染)。但就我而言,这不是一种干净的方法。我想遵循最佳实践,但我仍在学习很多东西,所以这就是我寻求帮助的原因:)

【问题讨论】:

    标签: reactjs gatsby gatsby-image


    【解决方案1】:

    您可以只创建一个包装器div 来侦听onMouseEnter/onMouseLeave 事件:

    const [activeImage, setActiveImage]= useState("gatsby");
    // ...
    
      <div onMouseEnter={setActiveImage("store")} onMouseLeave={setActiveImage("gatsby")}>
          {activeImage === "gatsby" ? <GatsbyImage
                      alt={firstImage?.altText ?? title}
                      image={firstImage?.gatsbyImageData}
                      loading={eager ? "eager" : "lazy"}
                      className="object-cover object-center w-full h-full group-hover:opacity-75"
                    /> : <GatsbyImage
                      alt={"Second Image"}
                      image={storefrontImageData}
                      loading={eager ? "eager" : "lazy"}
                      className="object-cover object-center w-full h-full group-hover:opacity-75"
                    />}
        </div>
    

    您的setActiveImage 可以是您需要的任何东西,在这种情况下,我设置了一个在gatsbystore 之间变化的函数以用于演示目的,但可以是布尔值等。

    【讨论】:

    • 谢谢。你帮助我找到了正确的方向。我使用了一种略有不同的方法,因为您提供的方法并没有真正起作用。 onMouseEnter 应该是 onMouseOver 以获得即时效果。奇怪的是,onMouseEnter 并不能完美运行。我正在为其他人写这篇文章,也可以帮助他们朝着正确的方向前进 :) 感谢您的帮助!
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2015-12-07
    • 2013-09-19
    • 2012-12-05
    • 2013-04-10
    • 2012-03-13
    相关资源
    最近更新 更多