2014-06-08 12 views
11

Chcę, aby komponent reagowania przerzucał się, gdy użytkownik kliknie element DOM. Widzę pewną dokumentację na temat ich miksu animacji, ale wygląda na to, że jest skonfigurowana dla zdarzeń "wejdź" i "opuść". Jaki jest najlepszy sposób, aby to zrobić w odpowiedzi na niektóre dane wprowadzone przez użytkownika i otrzymywać powiadomienia, gdy animacja się rozpocznie i skończy? Obecnie mam element listy i chcę, aby przewertował pokaz na kilka przycisków, takich jak delete, edit, save. Być może przegapiłem coś w dokumentach.Jak można animować komponent react.js onclick i wykrywać koniec animacji?

animacja mixin

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

+1

nie sądzę, istnieje sposób to zrobić bez użycia straszne animacje jQuery złapać start/koniec w javascript. Jeśli nie masz nic przeciwko korzystaniu z tych animacji, będą działać ... to po prostu niezbyt miłe: P –

+0

@ mike-driver Od 2016 roku to nieprawda. jQuery zadziała, ale nie jest konieczne. Zobacz moją odpowiedź. – arve0

+0

@MikeDriver w ogóle, cokolwiek zrobić w jQuery można zrobić bez jQuery, jest zbudowany na javascript, więc jQuery ma dostęp do tego samego API: s jak javascript – Himmators

Odpowiedz

9

Po kliknięciu można zaktualizować stan, dodać klasę i nagrać wydarzenie animationend.

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> 
    ) 
    } 
} 

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

1

nigdy nie używałem React, ale jeśli korzysta CSS3 animations/transitions, może być w stanie zrobić coś takiego:

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

    console.log('Complete'); 

}, false); 
+0

React używa wirtualnego DOM. Miałem nadzieję, że w React jest wbudowany sposób, więc nie musiałem bawić się z DOM bezpośrednio. – Tim

+0

Jeśli zamierzasz animować coś, co widzi użytkownik, będziesz musiał dotknąć DOM. Nie da się tego obejść. –

0

ja z powodzeniem stosować ten project w mojej integracji z młotkiem reakcyjnym project jest kilka przykładów zdarzeń młota i animacji reagowania.