在 React 中添加/重新启动 CSS 动画 onClick 后删除类

Posted

技术标签:

【中文标题】在 React 中添加/重新启动 CSS 动画 onClick 后删除类【英文标题】:Remove class after adding / Restart CSS animation onClick in React 【发布时间】:2018-01-06 17:18:36 【问题描述】:

我正在使用 CSS transform 在单击 AwesomeFont 图标时为其设置动画

.animate 
    -webkit-animation-duration: 400ms;
    -webkit-animation-name: animation

AFAIK,要触发动画,我需要在渲染后将上述类添加到元素中。所以我在 React 中这样做

class Class extends Component 
  state = 
    likes: 5,
    play: false
  

  handleClick = () => 
    this.setState((p) =>  return play: p.play ? false : true; )
  

  render() 
    <a onClick=this.handleClick href="#" />
      <Icon className=this.state.play ? 'animate' : '' name="thumbs-up" />
      this.state.likes
    </a>
  

如果我只是在每次点击时切换状态,效果会很好,但现在我想在每次点击时触发动画

...

  handleClick = () => 
    this.setState((p) =>  return play: p.play ? false : true; )
  

  render() 
    <a onClick=this.handleClick onMouseUp=() => this.setState(()=>return play:false; ) href="#" />
      <Icon className=this.state.play ? 'animate' : '' name="thumbs-up" />
      this.state.likes
    </a>
  

它不漂亮,但我只是想说明一点,我认为它没有按应有的方式工作,因为重复单击链接的数字部分不会触发动画,而是单击Icon可以。

我尝试添加类onMouseDown 并删除它onMouseUp,但React 只是批量处理setStates,结果什么也没有。有任何想法的人应该如何解决这个问题?

【问题讨论】:

【参考方案1】:

请尝试将标签更改为 div 标签。单击和其他鼠标事件在 div 及其子元素上工作正常。看一个例子:

<div id='wrapper' onClick='wrapperClick()' onMouseUp='wrapperMouseUp()'>
  This is parent
  <div id='child'>
    I am child
  </div>
</div>


#wrapper 
  width:100px;
  height:100px;
  border:1px solid black;


#child 
  padding-top:10px;
  border:1px solid red;


function wrapperClick() 
  alert('you clicked me')


function wrapperMouseUp() 
  alert('Mouse Up')

请注意,鼠标向上在点击事件之前触发。

handleMouseUp = () => 
  setCounter()

handleClick = () => 
  setCounter()


setCounter() 
  this.setState((p) =>  return play: p.play ? false : true; )


  render() 
    <div onClick=this.handleClick onMouseUp=this.handleMouseUp href="#" />
      <Icon className=this.state.play ? 'animate' : '' name="thumbs-up" />
      this.state.likes
    </div>
  

【讨论】:

以上是关于在 React 中添加/重新启动 CSS 动画 onClick 后删除类的主要内容,如果未能解决你的问题,请参考以下文章

在 CSS3 中重新启动动画:比删除元素更好的方法吗?

在 React 应用程序中添加 CSS @keyframes 动画以更改状态

如何在不使用 void 的情况下重新启动 CSS 动画?

重新启动时如何使这个 CSS 关键帧动画平滑?

如何以最小的影响重新启动 CSS 动画

React 动态添加动画反向类