2014-06-08 11 views
11

Ich möchte eine reagierende Komponente umdrehen lassen, wenn ein Benutzer auf das DOM Element klickt. Ich sehe einige Dokumentationen über ihren Animations Mix, aber es sieht so aus, als ob sie für "Enter" und "Leave" Events eingerichtet sind. Was ist der beste Weg, dies als Reaktion auf einige Benutzereingaben zu tun und benachrichtigt zu werden, wenn die Animation startet und beendet wird? Momentan habe ich einen Listeneintrag und möchte, dass er einige Tasten wie Löschen, Bearbeiten, Speichern umdrehen lässt. Vielleicht habe ich etwas in den Unterlagen verpasst.Wie kann ich eine react.js Komponente animieren onclick und das Ende der Animation erkennen

Animation mixin

http://facebook.github.io/react/docs/animation.html

+1

Das glaube ich nicht, dass es eine Möglichkeit, dies zu tun, ohne schreckliche jQuery Animationen mit dem Start/Ende in Javascript zu fangen. Wenn Sie diesen Animationen nicht abgeneigt sind, werden sie funktionieren ... es ist einfach nicht sehr nett: P –

+0

@ mike-driver Seit 2016 stimmt das nicht. jQuery funktioniert, aber es ist nicht notwendig. Siehe meine Antwort. – arve0

+0

@MikeDriver im Allgemeinen, alles, was in jQuery getan wird, kann ohne jQuery gemacht werden, es ist auf dem Javascript gebaut, so dass jQuery Zugriff auf die gleiche API hat: s as javascript – Himmators

Antwort

9

Bei Klicks können Sie den Status aktualisieren, eine Klasse hinzufügen und das Ereignis animationend aufzeichnen.

class ClickMe extends React.Component { 
    constructor (props) { 
    super(props) 
    this.state = {} 
    this.state.fade = false 
    this.fadingDone = this.fadingDone.bind(this) 
    } 
    componentDidMount() { 
    const elm = this.refs.button 
    elm.addEventListener('animationend', this.fadingDone) 
    } 
    componentWillUnmount() { 
    const elm = this.refs.button 
    elm.removeEventListener('animationend', this.fadingDone) 
    } 
    fadingDone() { 
    // will re-render component, removing the animation class 
    this.setState({fade: false}) 
    } 
    render() { 
    const fade = this.state.fade 

    return (
     <button 
     ref='button' 
     onClick={() => this.setState({fade: true})} 
     className={fade ? 'fade' : ''}> 
      Click me! 
     </button> 
    ) 
    } 
} 

Siehe jsfiddle: https://jsfiddle.net/9eqpfv0k/1/

1

ich nie React benutzt habe, aber wenn es CSS3 animations/transitions verwendet, können Sie in der Lage sein, so etwas zu tun:

element.addEventListener('webkitTransitionEnd', function(event) { 

    console.log('Complete'); 

}, false); 
+0

React verwendet ein virtuelles DOM. Ich hatte gehofft, dass es einen Weg in React gibt, also musste ich nicht direkt mit dem DOM herumspielen. – Tim

+0

Wenn Sie etwas animieren wollen, das der Benutzer sieht, müssen Sie das DOM berühren. Es gibt keinen Weg dahin. –

0

ich diese erfolgreich eingesetzt project In meiner Reaktion Hammer Integration project gibt es einige Beispiele mit Hammer-Events und reagieren Animation.

Verwandte Themen