提问者:小点点

通过使用css在ReactJS中悬停另一个图像来隐藏图像


我有以下反应代码。

我的代码

我想要的是当我悬停的第一个图像比其他图像应该隐藏(或者变成透明,这样定位就不会塌陷)。

a.对于其他图片也是如此,例如,如果你在第三张图片上悬停,那么第一张,第二张和第四张图片应该变成隐藏或透明。

我看过其他的主题,比如:

当一个元素被悬停时如何影响其他元素,当另一个元素被悬停时如何隐藏元素,但我不能修复我的代码。

也许使用一些reactJS代码会更容易修复?

请帮帮我。


共2个答案

匿名用户

我会这样做:

跟踪悬停项的索引,并根据该悬停索引更改样式不透明度。

// SolutionBox.jsx

import React, { useState } from "react";
import SolutionItem from "./SolutionItem";
import Ecommerce from "../img/a.png";
import Middleware from "../img/b.png";
import SalesMarketing from "../img/c.png";
import Analytics from "../img/d.png";
import _ from "lodash";

function SolutionsSectionBox({ onBGChanged }) {
  const [focused, setFocused] = useState(0);

  let callBGChanged = menuName => {
    if (_.isFunction(onBGChanged)) {
      onBGChanged(menuName);
    }
  };

  return (
    <div className="solutions-section-box-box">
      <SolutionItem
        solutionIMG={Ecommerce}
        onHover={state => {
          setFocused(1);
          callBGChanged(state === true ? "Ecommerce" : "default");
        }}
        focused={focused}
        index={1}
        onLeave={() => setFocused(0)}
      />
      <SolutionItem
        solutionIMG={SalesMarketing}
        onHover={state => {
          setFocused(2);
          callBGChanged(state === true ? "SalesMarketing" : "default");
        }}
        focused={focused}
        index={2}
        onLeave={() => setFocused(0)}
      />
      <SolutionItem
        solutionIMG={Analytics}
        onHover={state => {
          setFocused(3);
          callBGChanged(state === true ? "Analytics" : "default");
        }}
        focused={focused}
        index={3}
        onLeave={() => setFocused(0)}
      />
      <SolutionItem
        solutionIMG={Middleware}
        onHover={state => {
          setFocused(4);
          callBGChanged(state === true ? "Middleware" : "default");
        }}
        focused={focused}
        index={4}
        onLeave={() => setFocused(0)}
      />
    </div>
  );
}
export default SolutionsSectionBox;

解决方案项:

// Solution Item:

import React from "react";
import _ from "lodash";

function SolutionsSectionBoxItem({
  onLeave,
  solutionIMG,
  onHover,
  index = 0,
  focused = 0
}) {
  let callOnHover = state => {
    if (_.isFunction(onHover)) {
      onHover(state);
    }
  };

  return (
    <div className="solutions-section-item-box">
      <img
        style={{
          opacity: focused && focused !== index ? 0.5 : 1
        }}
        src={solutionIMG}
        alt=""
        onMouseEnter={() => {
          callOnHover(true);
        }}
        onMouseLeave={() => {
          callOnHover(false);
          onLeave();
        }}
        className="solutions-section-item-img"
      />
    </div>
  );
}
export default SolutionsSectionBoxItem;

匿名用户

您可以使用现有的bgimg状态来推断哪个是可见的。

如果您将其作为道具传递给SolutionBox,如

<SolutionBox bgImage={bgImage} onBGChanged={onBGChanged} />

然后为每个SolutionItem

<SolutionItem
  solutionIMG={Ecommerce}
  visible={bgImage === Ecommerce}
  onHover={state => {
    callBGChanged(state === true ? "Ecommerce" : "default");
  }}
/>

并使用它在SolutionItem中设置样式

<div className="solutions-section-item-box" style={{ opacity: visible ? 1 : 0.5}}>