代码之家  ›  专栏  ›  技术社区  ›  Atlante Avila

如何在Reactjs中重放CSS3动画

  •  3
  • Atlante Avila  · 技术社区  · 6 年前

     @-webkit-keyframes jello-horizontal{
        0%{
            -webkit-transform:scale3d(1,1,1);
            transform:scale3d(1,1,1)
        }
        30%{
            -webkit-transform:scale3d(1.25,.75,1);
            transform:scale3d(1.25,.75,1)
        }
        40%{
            -webkit-transform:scale3d(.75,1.25,1);
            transform:scale3d(.75,1.25,1)
        }
        50%{
            -webkit-transform:scale3d(1.15,.85,1);
            transform:scale3d(1.15,.85,1)
        }
        65%{
            -webkit-transform:scale3d(.95,1.05,1);
            transform:scale3d(.95,1.05,1)
        }
        75%{
            -webkit-transform:scale3d(1.05,.95,1);
            transform:scale3d(1.05,.95,1)
        }
        100%{
            -webkit-transform:scale3d(1,1,1);
            transform:scale3d(1,1,1)
        }
    }
    @keyframes jello-horizontal{
        0%{
            -webkit-transform:scale3d(1,1,1);
            transform:scale3d(1,1,1)
        }
        30%{
            -webkit-transform:scale3d(1.25,.75,1);
            transform:scale3d(1.25,.75,1)
        }
        40%{
            -webkit-transform:scale3d(.75,1.25,1);
            transform:scale3d(.75,1.25,1)
        }
        50%{
            -webkit-transform:scale3d(1.15,.85,1);
            transform:scale3d(1.15,.85,1)
        }
        65%{
            -webkit-transform:scale3d(.95,1.05,1);
            transform:scale3d(.95,1.05,1)
        }
        75%{
            -webkit-transform:scale3d(1.05,.95,1);
            transform:scale3d(1.05,.95,1)
        }
        100%{
            -webkit-transform:scale3d(1,1,1);
            transform:scale3d(1,1,1)
        }
    }
     .jello-horizontal{
        -webkit-animation:jello-horizontal .9s both;
        animation:jello-horizontal .9s both
    }
    

    当mycomponent第一次加载时,它工作得很好,但是如何在每次单击特定按钮时加载组件?

    我的组件相当复杂,可以在这里添加代码,但我不认为这是必要的,因为我只需要一个如何触发按钮点击动画的例子。不确定这是否可能。我单击的按钮将更新一个状态,下面是组件简化版本的示例:

    import React, {Component} from 'react';
    
    export class Cards extends Component {
      constructor() {
        super();
        this.state = {
          flashCardIndex: 0,
          cards: [],
          currentCard: undefined,
          rightActive: true,
          leftActive: true,
          cardError: false,
          nowPlaying: false,
          showLoader: false,
          animateCard: true,
        };
    
        render() {
           return (<div className="flash-card jello-horizontal">
                      <a href="">Run animation</a>
                  </div>)
        }    
    }
    
    1 回复  |  直到 6 年前
        1
  •  22
  •   Shubham Yerawar    6 年前

    ReactJS使用 key 属性来区分diffing算法中的元素。因此,第一次加载组件时,react将其假定为新元素并相应地渲染它。但下一次它尝试用不同的数据呈现同一个元素时,react会感觉到它具有相同的结构,只会用旧数据替换新数据。

    钥匙 添加到动画类中的元素。密钥可以使用任意随机数生成器随机生成(我通常使用 shortid

    有关工作示例,请参阅: this