在React Motion v4中努力让我的头围“旋转”和“缩放”并且似乎无法在网上找到更多关于如何做到的事情。它很容易改变一个简单的css属性以及如下所示的简单状态更改:
<Motion
defaultStyle={{opacity: 0}}
style={{opacity: spring(this.state.isActive ? 1 : 0, {stiffness: 200, damping: 12})}}>
{style =>
<div style={{opacity: style.opacity}} className="action-panel">
<div id="action-content" className="action-panel-content"></div>
</div>
}
</Motion>
但是,如何使用更复杂的css属性(例如“ transform:rotate(90deg)”)进行上述操作?
最后,如果我想拥有更复杂的状态逻辑,例如在翻转和转出时发生的动画,以及各种状态是真还是假,最好这样做?在使用React Motion之前,我根据其状态和一些条件更新了元素的内联样式,我现在还不确定如何使用React Motion进行此操作。你的想法会受到欢迎! :d
t xx
答案 0 :(得分:5)
rotate
&amp; scale
您可以使用http://www.dotnetcurry.com/magazine/ ${ expresion }
。
让我告诉你
<Motion
defaultStyle={{ rotate: 0, scale: 1}}
style={{ rotate: spring(180), scale: spring(3)}}
>
{style =>
(
<div style={{
transform: `rotate( ${style.rotate}deg )`,
transform: `scale( ${style.scale}, ${style.scale} )`
}}> </div>
)
}
</Motion>
注意使用反引号
对于交互式动画,React非常善于访问DOM并使用包含tagged template literals的SyntheticEvents。
onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter
onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown
onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp
这是使用setState
import React, { Component } from 'react'
import { Motion, spring } from 'react-motion'
class App extends Component {
state = {
rotate: 0
}
enter(){
this.setState({rotate: 180})
}
leave(){
this.setState({rotate: 0})
}
render(){
return (
<Motion
defaultStyle={{ rotate: 0}}
style={{ rotate: spring(this.state.rotate)}}
>
{style =>
(
<div
style={{
transform: `rotate( ${style.rotate}deg )`,
}}
onMouseEnter={this.enter.bind(this)}
onMouseLeave={this.leave.bind(this)}
> </div>
)
}
</Motion>
)
}
}
export default App
现在这不会显示任何内容,因为div
没有预定义的维度。要做到这一点,让我们声明styles
对象。
低于import
行
const styles = {
div: {
height: 100,
width: 100,
backgroundColor: 'papayawhip'
}
}
那么你可以像这样使用它:
style={ Object.assign( {},
styles.div,
{
transform: `rotate( ${style.rotate}deg )`,
// more styles here...
})
}