我想在两个组件之间进行动画处理,第一个组件淡出并从DOM中删除,然后再将下一个组件添加到DOM中并淡入。否则,新组件将添加到DOM中并占用空间。旧组件已删除。您可以在这个小提琴中看到问题:
http://jsfiddle.net/phepyezx/4
// css snippet
.switch-enter {
opacity: 0.01;
}
.switch-enter.switch-enter-active {
opacity: 1.0;
}
.switch-leave {
opacity: 1.0;
}
.switch-leave.switch-leave-active {
opacity: 0;
}
// React snippet
<ReactCSSTransitionGroup transitionName="switch">
<div key={key} className={className}>{this.text()}</div>
</ReactCSSTransitionGroup>
对于我来说,不可接受的解决方案是在转换为新组件之前用CSS隐藏原始组件,如下所示:
http://jsfiddle.net/phepyezx/5
// Change to css
.switch-leave {
visibility: hidden;
height: 0px;
width: 0px;
opacity: 1.0;
}
有没有办法在拆下原始组件之前“延迟”安装新组件的反应?我对速度或其他库持开放态度。
谢谢
使用componentWillUnmount()
生命周期方法解决。
http://jsfiddle.net/phepyezx/9/
这是代码:
var ReactCSSTransitionGroup = React.addons.CSSTransitionGroup;
const Off = React.createClass({
componentWillUnmount () {
this.props.handleTransitionEnd();
},
render() {
return (
<div className="off button">OFF</div>
)
}
});
const On = React.createClass({
componentWillUnmount () {
this.props.handleTransitionEnd();
},
render() {
return (
<div className="on button">ON</div>
)
}
});
var Switch = React.createClass({
getInitialState: function() {
return {
on: false,
transitionEnd: true
};
},
toggle: function(e) {
this.setState({
on: !this.state.on,
transitionEnd: false
});
},
handleTransitionEnd() {
this.setState({transitionEnd: true});
},
renderOff() {
if (! this.state.on && this.state.transitionEnd) {
return (
<Off key="off" handleTransitionEnd={this.handleTransitionEnd} />
)
}
},
renderOn() {
if (this.state.on && this.state.transitionEnd) {
return (
<On key="on" handleTransitionEnd={this.handleTransitionEnd} />
)
}
},
render: function() {
return (
<div>
<button onClick={this.toggle}>Toggle</button>
<ReactCSSTransitionGroup transitionName="switch">
{this.renderOff()}
{this.renderOn()}
</ReactCSSTransitionGroup>
</div>
);
}
});
React.render(<Switch/>, document.getElementById("switch"));
和相关的CSS:
.switch-enter {
opacity: 0.01;
}
.switch-enter.switch-enter-active {
opacity: 1.0;
transition: opacity 500ms ease-in;
}
.switch-leave {
opacity: 1.0;
}
.switch-leave.switch-leave-active {
opacity: 0;
transition: opacity 500ms ease-out;
}
您可以使用onnyBuchanan的答案获得相同的有效结果,该答案使用绝对定位和延迟而不是componentWillUnmount()
请看两张截图: 上面的部分好像是用了一个ViewPager。ViewPager上的当前屏幕显示上一个和下一个屏幕的一部分。 问题:我们如何实现这个动画?i、 e.在哪里可以看到部分上一个和下一个屏幕??
问题内容: 这个简单的事情应该很容易完成,但是我要把它弄复杂。 我要做的就是动画化React组件的安装和卸载。到目前为止,这是我尝试过的方法,以及每种解决方案都不起作用的原因: -我根本不使用CSS类,因为它全都是JS样式,所以这行不通。 -这个较低层的API很棒,但是它要求您在动画制作完成后使用回调,因此仅使用CSS过渡在此处无效。总会有动画库,这引出下一点: GreenSock-许可证对于IM
我真的不知道react router中render和component prop in Route之间的区别,在文档中它说render不创建新元素,但component创建新元素,我试图返回历史,但我发现在使用render in Route时调用componentWillMount,“如果为组件属性提供内联函数,则在每次渲染时都会创建一个新组件。这将导致现有组件卸载和新组件装载,而不仅仅是更新现有
主要内容:本节引言:,1.补间动画的分类和Interpolator,2.各种动画的详细讲解,3.写个例子来体验下,4.动画状态的监听,5.为View动态设置动画效果,6.为Fragment设置过渡动画,7.为Activity设置过场动画,8.写个进入APP后登陆注册按钮从底部弹出动画效果的例子:,9.本节代码示例下载,本节小结:本节引言: 本节带来的是Android三种动画中的第二种——补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指
有人能解释一下 和 我不知道确切的意思。
动画组件控制动画的播放。 像其他组件一样为结点添加动画组件: import { Animation, Node } from "cc"; function (node: Node) { const animationComponent = node.addComponent(Animation); } 动画组件管理了一组动画剪辑。 动画组件开始运作前,它为每一个动画剪辑都创建了相应的