使用 React js 更改不透明度和动画

change opacity and animated that with react js

我开始了一个简单的项目react.in我的项目我有一个段落,当鼠标悬停在段落上时(鼠标进入事件)段落下方会出现一个正方形,当鼠标悬停在段落下方时(鼠标离开事件)那个方块 disapear.but 这发生得如此之快所以我想顺利地改变它并且我想使用不透明度并将其从 0 更改为 1 并在我的事件发生时反转 occure.but 我不知道如何改变不透明度在反应中有动画。

这是我的应用程序

import './index.css';
import React, {useState} from "react";

function App() {
    const [isShowSquare, setIsShowSquare] = useState(false);
    const showSquare = () => {
        setIsShowSquare(true);
    }
    const hideSquare = () => {
        setIsShowSquare(false);
    }
    return (
        <div>
            <p onMouseEnter={showSquare} onMouseLeave={hideSquare} style={{display:'inline-block'}}>Hover Me</p>

            {isShowSquare ?
                <div className='square'>
                </div>
                : null
            }

        </div>

    );
}

export default App;

这是我的 index.css

*{
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}
body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
    sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.square{
  width: 50px;
  height: 50px;
  background-color: #61dafb;
}

如果有人能帮助我,我将不胜感激

出现很容易,消失我找到了这样的解决方案;


import { useState } from "react";
import "./styles.css";

export default function App() {

  const [visible, setVisible] = useState(false)
  const [disappear, setDisappear] = useState(false)



  return (
    <div className="App">
      <p onMouseLeave={()=> {
        setDisappear(true)
        setTimeout(()=>{setVisible(false)
        setDisappear(false)}
        , 1000)      
      }} onMouseEnter={()=> setVisible(true)}>Hide/Show square </p>

{visible && <div className="square"  
style={{
width: 100,
height: 100,
animation: disappear ? "disappear 1s ease" : "appear 1s ease"
}}> </div> }  

 </div>
  );
}

对于 css 中的动画;

//style.css

.square {
  background-color: red;
  animation: appear 1s ease;

}
@keyframes appear {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}



@keyframes disappear {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}  

所以这里发生的是我们 css 上最初有一个不透明度关键帧。所以这很好用,棘手的部分正在消失。当我们将可见状态设置为 false 时,React 会立即删除我们的元素,因此我们有 setTimeOut 来停止 React 1 秒。在那 1 秒内,我们应用了动画,它在我身上运行得很流畅。继续尝试。

这里有一个不使用 useState 的方法。 我不知道这部分是否重要,但看看我的 sandbox

首先你需要一个 css class 来定义方法的不透明度以及需要多少时间。此外,您的第一个 square class 应该具有不透明度:0,表示不可见。

当鼠标悬停在文本上时,您向元素添加额外的 class。

  const showSquare = () => {
    div.current.classList.add("square-full");
  };

  const hideSquare = () => {
    div.current.classList.remove("square-full");
  };

.square.square-full {
  opacity: 0.5;
  transition: opacity 1s ease-out;
}

.square {
  width: 50px;
  height: 50px;
  background-color: #61dafb;
  opacity: 0;
}

更新后的答案:不需要 ref

只需使用以下代码

export default function App() {
  const [ isShown, setShown ] = useState(false)

  return (
    <div>
      <p
        onMouseEnter={() => setShown(true)}
        onMouseLeave={() => setShown(false)}
        style={{ display: "inline-block" }}
        class="paragraph"
      >
        Hover Me
      </p>

      <div className={`square ${isShown ? 'square-full' : ''}`}></div>
    </div>
  );
}

以及我之前提到的额外 class