回答
在作怪即使世界的一些问题在这里的,很容易解决:
1)您必须使用import CSSTransitionGroup from 'react-addons-css-transition-group
而不仅仅是普通的旧过渡组包 - 这不仅增加了生命周期挂钩,其中CSS版本用于添加/删除类
2)要理解的最重要的事情是实际触发动画的内容。 CSS转换组通过将转换类应用于正在进入和退出其children
(通过键保持跟踪)的子元素,但为了这样做,CSSTransitionGroup必须已经存在,它是有条件存在或不存在的子元素。在您的代码中,只有在弹出状态处于打开状态时才添加CSSTransition组,这意味着它无法监视它的子项,因此它只显示并消失而没有转换。因此,你必须做出CSSTransition组总是被渲染,但后来有条件添加弹出DIV作为一个孩子的状态是开...
const PopUp = ({ state, close }) => {
return (
<CSSTransitionGroup
transitionName="pop"
transitionAppear={true}
transitionAppearTimeout={2000}
transitionEnterTimeout={2000}
transitionLeaveTimeout={300}
component="div"
>
{state.open && <div key="popup"
style={{
width: window.innerWidth,
position: 'fixed',
left: 0,
top: 0,
overflowX: 'hidden',
backgroundColor: 'white',
zIndex: '999',
}}
>
<span>I am a popup</span>
<FlatButton label="Close" onClick={close} />
</div>
}
</CSSTransitionGroup>
);
};
3)你可以从上面看到我还增加了在appear
情况下,动画是在第一次安装的情况发生 - 在你的情况下,其细如在闭合状态下已经呈现第一,但这里值得注意以供将来参考
4)最后你是动画在CSS的height
属性,但你在你的样式属性中将高度显式设置为height: window.innerHeight
。这将转换为HTML中的样式标签,它始终优先于任何CSS样式表规则,因此您的动画高度总是会丢失。删除它和你的动画工作 - 但是动画结束后不会设置高度。你可以通过保持你的height: window.innerHeight
并且强制CSS定义的高度用height: 100vh !important;
语法来覆盖它来解决这个问题(尽管这实际上是不好的CSS练习,因为当你创建更复杂的样式表时它会让你头疼,因为它会阻止你能够使用特异性)
这里是一个工作版本:https://codesandbox.io/s/W7Q8QP56W
进一步改进这个我建议你要么移到该组件所有的CSS样式表,使他们能够工作中使用的特异性和级联覆盖对方正常,或者使用类似opacity
的动画来代替动画(因为默认默认值是1,你不需要在你的JS风格的道具中设置它) - 反应将删除整个元素一旦动画完成后,无论如何你都不会被阻止与页面交互,因此你可以自由地将它硬编码到整页高度
- 1. CSS转换代码组织
- 2. 在React组件中转换字符串
- 3. 将数组转换为常规CSS
- 4. webkit css转换
- 5. React Native Navigator转换问题
- 6. 元素无法在React中的css转换状态更改
- 7. 如果元素排序变化,React会丢失CSS转换
- 8. 如何替换React组件
- 9. Css转换抖动
- 10. CSS菜单转换
- 11. Bootstrap CSS转换onhover
- 12. 多个CSS转换
- 13. CSS转换错误
- 14. CSS透视转换
- 15. 转换CSS jQuery的
- 16. 转换表到CSS
- 17. CSS - 光标转换
- 18. 双向CSS转换
- 19. CSS转换回调
- 20. CSS滤镜转换
- 21. Xpath到CSS转换
- 22. 实现CSS转换
- 23. css转换问题
- 24. CSS转换淡入
- 25. CSS页面转换
- 26. CSS转换:悬停
- 27. CSS转换和DIV
- 28. Css转换属性:仅转换?
- 29. CSS样式转换vs svg转换
- 30. - 如何在我的React组件中转换jQuery代码?
感谢您的输入。这将有很大帮助。 –