使用 Nextjs 和 GSAP 悬停在标题上动态显示图像

Posted

技术标签:

【中文标题】使用 Nextjs 和 GSAP 悬停在标题上动态显示图像【英文标题】:Display image dynamically on hover on title with Nextjs and GSAP 【发布时间】:2021-09-01 18:57:00 【问题描述】:

我有一个动态呈现的标题列表,当我将鼠标悬停在每个标题上时,我想显示一个图像。 当我悬停标题时,所有图像都会显示。 我仍然是 React 的新手。我认为解决方案很简单,但我没有找到。

Component.js

import React,  useEffect, useRef  from "react";
import  Row, Col  from "react-bootstrap"
import Link from "next/link";
import gsap from "gsap";
import  getStrapiMedia  from "../lib/media";


const Articles = ( articles ) => 

  const itemsRef = useRef();

  const handleHover = (e) => 
    gsap.to(".imgHome", 
      display: "block"
    )
  

  const handleHoverExit = (e) => 
    gsap.to(".imgHome", 
      display: "none"
    )
  

  return (
    <div>
      <div className="tableau">
            articles.map((item) => (
              <Row key=item.id
                onMouseEnter=(e) => handleHover(e)
                onMouseOut=(e) => handleHoverExit(e)
                ref=el => (itemsRef.current[item.id] = el)>
                <Link href=`/article/$item.id`>
                  <a className="titre"
                  >item.title </a>
                </Link>
                <img className="imgHome" src=getStrapiMedia(item.image.url)
                   />
              </Row>
            ))
      </div>
    </div>
  )


export default Articles

【问题讨论】:

【参考方案1】:

您可以在&lt;img&gt; 元素上使用refs,然后在gsap.to 函数调用中引用它们,而不是使用.imgHome 类。

const Articles = ( articles ) => 
    const imagesRef = useRef();

    const handleHover = (e, id) => 
        gsap.to(imagesRef.current[id],  display: "block" )
    

    const handleHoverExit = (e, id) => 
        gsap.to(imagesRef.current[id],  display: "none" )
    

    return (
        <div>
            <div className="tableau">
                articles.map((item) => (
                    <Row key=item.id
                        onMouseEnter=(e) => handleHover(e, item.id)
                        onMouseOut=(e) => handleHoverExit(e, item.id)
                    >
                        <Link href=`/article/$item.id`>
                            <a className="titre">item.title </a>
                        </Link>
                        <img 
                            ref=(el) => (imagesRef.current[item.id] = el) 
                            className="imgHome" 
                            src=getStrapiMedia(item.image.url) 
                             
                        />
                    </Row>
                ))
            </div>
        </div>
    )

【讨论】:

以上是关于使用 Nextjs 和 GSAP 悬停在标题上动态显示图像的主要内容,如果未能解决你的问题,请参考以下文章

NEXTJS - 公共图像未显示在动态路线上

Tailwind CSS 动画在 ReactJs/NextJs 中不起作用

Nextjs 中使用 getServerSideProps 进行动态路由

nextjs 动态路由渲染内容不起作用

使用 GSAP 在滚动上为 SVG 设置动画

如何在 NextJs Document 上动态设置 HTML lang 属性?