Skip to content

Instantly share code, notes, and snippets.

@Matsemann
Last active August 8, 2016 07:59
Show Gist options
  • Save Matsemann/fd20e2dc1d560b8f5ce23d1dd335b54c to your computer and use it in GitHub Desktop.
Save Matsemann/fd20e2dc1d560b8f5ce23d1dd335b54c to your computer and use it in GitHub Desktop.
React åpne/lukke animasjon med react-addons-transition-group
import {Component} from 'react';
import {findDOMNode} from 'react-dom';
class AnimertApneLukk extends Component {
// logikk basert på http://n12v.com/css-transition-to-from-auto/
componentWillEnter(callback) {
var element = findDOMNode(this);
var hoyde = element.offsetHeight; // les ut høyden når auto
element.style.height = '0px';
element.offsetHeight; // sett høyden til 0 og trigger rerender
element.classList.add('klasse-med-transition'); // klassen må generelt fjernes og legges til, ellers går safari bananas med animasjoner
element.style.height = hoyde + 'px'; // sett høyden til høyden ved auto, blir nå animert
element.addEventListener('transitionend', () => { // må evt. lytte på annet her, se https://davidwalsh.name/css-animation-callback
element.classList.remove('klasse-med-transition');
element.style.height = 'auto';
callback(); // fortell react-transition at vi er klar
// bør potensielt fjerne listeneren igjen her
});
}
componentWillLeave(cb) {
var element = findDOMNode(this);
var autoHeight = element.offsetHeight; // les ut høyden ved auto
element.style.height = autoHeight + 'px';
element.offsetHeight; // hardkoder høyden i px og rerendrer
element.classList.add('klasse-med-transition');
element.style.height = '0px'; // animerer ned til 0
element.addEventListener('transitionend', () => {
cb(); // react transition røsker nå greia ut av domen
});
}
render() {
return this.props.children;
}
}
export default AnimertApneLukk;
import React from 'react';
import ReactTransitionGroup from 'react-addons-transition-group';
import AnimertApneLukk from './animert-apne-lukk.jsx';
const Trekkspill = ({children, erApen}) => {
return (
<ReactTransitionGroup>
{erApen ?
<AnimertApneLukk>{children}</AnimertApneLukk>
: null}
</ReactTransitionGroup>
);
};
export default Trekkspill;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment