反应力过渡以在悬停时结束

Posted

技术标签:

【中文标题】反应力过渡以在悬停时结束【英文标题】:React force transition to end on hover 【发布时间】:2021-10-28 07:31:38 【问题描述】:

给定:

function App() 

    return (
       <ul> 
         <li>H</li>
         <li>e</li>
         <li>l</li>
         <li>l</li>
         <li>o</li>
       </ul>
    );
   

   
ReactDOM.render(<App />, document.querySelector("#app"));
ul li 
    list-style: none;
    float: left;
    font-size:60px;
    color: black;

    transition: 0.5s;


li:hover 
    transform: rotateY(360deg);


   
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
 <div id="app"></div>

JSFiddle link here,

我希望在鼠标进入字母时完全完成字母旋转转换。目前,当快速进出时,动画看起来非常糟糕。

我看到了类似的问题,涉及 javascript 和 JQuery,并且解决方案似乎改变了 javascript 中的某些内容,但我不知道如何专门使用 React 的 JSX 来做到这一点。


我尝试过的事情

我想到了一个[transitionState, setTransitionState] 钩子以及将onMouseEnter=() =&gt; setTransitionState(true)onTransitionEnd=transitionState 一起使用,但我无法完成这项工作,我认为这不是正确的方法,因为有5 个li 元素我将不得不为所有这些重复此代码?

有人知道我该如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

您可以制作一个组件进行过渡。

https://jsfiddle.net/fdq6nabk/21/

function AniLetter(props) 
  const handleMouseEnter = (e) => 
    e.target.classList.add("hover");
  
  const handleTransitionEnd = (e) => 
    e.target.classList.remove("hover");
  

  return (
    <li
      onMouseEnter=handleMouseEnter
      onTransitionEnd=handleTransitionEnd>
      props.children
    </li>
  )


function App() 
  return (
    <ul> 
      <AniLetter>H</AniLetter>
      <AniLetter>e</AniLetter>
      <AniLetter>l</AniLetter>
      <AniLetter>l</AniLetter>
      <AniLetter>o</AniLetter>
    </ul>
  );


ReactDOM.render(<App />, document.querySelector("#app"));

CSS:

ul li 
    list-style: none;
    float: left;
    font-size:60px;
    color: black;
    margin: 0 6px;


li.hover 
    transition: 2.9s;
    transform: rotateY(360deg);

【讨论】:

再次感谢@goldencat ;)

以上是关于反应力过渡以在悬停时结束的主要内容,如果未能解决你的问题,请参考以下文章

使用步骤对 png 序列进行 CSS 过渡

使用悬停过渡时,CSS 是不是可以通过第三种颜色进行过渡?

DIV背景图像变化的CSS过渡

CSS 过渡 - 仅在悬停时淡入淡出元素

悬停时的 SVG 不进行过渡

如何在悬停时将过渡速度应用于缩放图像?