React动画的几种实现方式
前言俗话说得好,饱暖思淫欲。使用React开发已经有一段时间了,在度过了初期的学习阶段和繁重的业务开发之后,总得来点更高级的东西。说到更高级的东西,无非就是体验优化、性能优化、代码质量、开发发布流程或运维监控等等,仅此而已。 今天咱们先来讲讲简单的体验优化方面的,也就是React动画,探索一下React动画有哪些实现方式。 手动实现在很久以前,React还没有 原理
代码如下: componentDidUpdate(preProps) {//显示的时候执行动画 if (this.props.show === true && preProps.show === false) { this.inAnimationTime = setTimeout(()=> { ReactDOM.findDOMNode(this).getElementsByClassName("modal")[0].classList.add("in"); },50); } } 这里的适当的延时是为了保证动画的有效执行。
只有当 {"com-modal": true,"show": this.props.show || this.state.inOutAnimation} 代码如下: componentWillReceiveProps(nextProps) {//隐藏的时候执行动画 if (this.props.show === true && nextProps.show === false) { this.setState({ inOutAnimation: true }); ReactDOM.findDOMNode(this).getElementsByClassName("modal")[0].classList.remove("in"); this.outAnimationTime = setTimeout(()=> { this.setState({ inOutAnimation: false }); },300); } } 说实话,实现的方式真的很low,又是延时,又是DOM操作的,感觉又回到了jQuery那个战火纷飞、刀耕火种的时代。代码臃肿冗余,基本就只能算实现了功能而已。(但是效果还是可以的) 效果
Animation Add-OnsReact animation官方文档 ReactCSStransitionGroup首先感谢React发布了 属性
` .right-to-left-enter { opacity: 0; transform: translate(5%,0); } .right-to-left-enter.right-to-left-enter-active { opacity: 1; transform: translate(0,0); transition: opacity 150ms linear,transform 200ms ease-out; } .right-to-left-leave { opacity: 1; transform: translate(0,0); } .right-to-left-leave.right-to-left-leave-active { opacity: 0; transform: translate(1%,0); transition: opacity 100ms linear,transform 200ms linear; }
.up-to-down-appear { opacity: 0; transform: translate(0,-45%); } .up-to-down-appear.up-to-down-appear-active { opacity: 1; transform: translate(0,transform 200ms ease-out; } 这个方法实现需要添加的CSS类还是挺多的,但是无论如何,也比之前的sou动实现的方式强太多。 效果:
注意
ReactTransitionGroupReactTransitionGroup是底层的API,相对来说会复杂点,后面再补充吧。 第三方库如果你觉得React提供的 react-motionvelocity-reactanimation(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |