jar*_*ght 32 javascript animation tweenmax reactjs
我想知道是否有人可以提供一些有关如何处理React.js中的离开动画的见解.我一直在使用Greensock TweenMax并且输入动画可以正常工作componentDidMount,但我还没有找到一种可靠的方法来为组件设置动画.
我的感觉是它应该进入componentWillUnmount,但是React没有提供回调机制来指示你何时准备好放弃一个组件.因此,转换动画永远不会完成,因为动画与React是异步的.相反,你看到动画的一小部分时间,组件消失,并被动画中的下一个组件取代.
自从我9个月前开始使用React以来,这是一个我一直在努力解决的问题.我不禁想到除了ReactCSSTransitionGroup我发现那些麻烦和挑剔的东西之外必须有一个解决方案,特别是使用react-router.
Mic*_*ley 47
ReactTransitionGroup(在其ReactCSSTransitionGroup上构建)是允许异步进入和离开的基本组件.它提供了生命周期钩子,可用于挂钩基于JS的动画.文档列出了允许的钩子:
ReactTransitionGroup是动画的基础.当声明性地添加或删除子项时(如上例所示),会在它们上调用特殊的生命周期钩子.有三种方法可以开始使用ReactCSSTransitionGroups:
import ReactCSSTransitionGroup from 'react-addons-css-transition-group' // ES6
var ReactCSSTransitionGroup = require('react-addons-css-transition-group') // ES5 with npm
var ReactCSSTransitionGroup = React.addons.CSSTransitionGroup; // ES5 with react-with-addons.js
Run Code Online (Sandbox Code Playgroud)
componentWillAppear(callback)这与
componentDidMount()最初安装在组件中的组件同时调用TransitionGroup.它将阻止其他动画发生,直到callback被调用.它仅在a的初始渲染时调用TransitionGroup.
componentDidAppear()在调用
callback传递给的函数之后componentWillAppear调用它.
componentWillEnter(callback)这与
componentDidMount()添加到现有组件的组件同时调用TransitionGroup.它将阻止其他动画发生,直到callback被调用.它不会在初始渲染时被调用TransitionGroup.
componentDidEnter()在调用
callback传递给的函数之后componentWillEnter调用它.
componentWillLeave(callback)当孩子被从孩子身上移走时,就会调用此方法
ReactTransitionGroup.虽然孩子已被移除,但ReactTransitionGroup会将其保留在DOM中,直到callback被调用为止.
componentDidLeave()调用它时
willLeavecallback(同时调用componentWillUnmount).
要为子项设置动画,您需要启动动画componentWillLeave并callback在动画完成时调用提供的动画.作为一个例子,这里是一个JSFiddle,它显示了一个错开动画的组件,让孩子们进出:http://jsfiddle.net/BinaryMuse/f51jbw2k/
动画的相关代码是:
componentWillLeave: function(callback) {
this._animateOut(callback);
},
_animateOut(callback) {
var el = ReactDOM.findDOMNode(this);
setTimeout(function() {
TweenLite.to(el, 1, {opacity: 0}).play().eventCallback("onComplete", callback);
}, this.props.animateOutDelay);
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26022 次 |
| 最近记录: |