gpt4 book ai didi

javascript - 使用 React.js 的 SlideUp() 和 SlideDown() 动画

转载 作者:行者123 更新时间:2023-12-03 13:01:12 24 4
gpt4 key购买 nike

我创建了一个由slideUp()和slideDown()动画组成的react组件。我已经使用 jQuery Slideup 和 Slidedown 方法实现了。

我必须使用 react 动画来实现此功能。

我读到了ReactTransitionGroupReactCSSTransitionGroup。解释的方式告诉我,我们可以在 DomNode 安装到组件或卸载时执行此功能(如果我错了,请纠正我)。

我的问题是 --> 如何以 React 方式而不使用 jQuery 执行 Slideup() 和 Slidedown()。

请参阅此 jsFiddle https://jsfiddle.net/guc3yrm1/

P.S ->请解释一下为什么这个 react 动画部分与 jQuery 相比似乎有点困难(我是一个 jQuery 人)

var Hello = React.createClass({
getInitialState: function() {
return {
slide: false,
}
},
slide: function() {
if (this.state.slide) {
$(this.refs.slide).slideDown();
this.setState({
slide: false
});
} else {
$(this.refs.slide).slideUp();
this.setState({
slide: true
});
}
},
render: function() {
return (
<div>
<input type = "button" value = "clickme" onClick = {this.slide}/>
<br />
<br />
<div className = "slide" ref="slide" >< /div>
</div>
);
}
});

ReactDOM.render( < Hello name = "World" / > ,
document.getElementById('container')
);

最佳答案

您可以在这两个动画的 API 中实现动画。主要区别如下:

ReactTransitionGroup is the API upon which ReactCSSTransitionGroup is built. The main difference between the two is that ReactTransitionGroup animations are written in Javascript instead of CSS, and a callback is provided to be invoked when animations are complete instead of relying on CSS transition events.

我的结论是使用 CSS 动画来完成简单的任务,而使用 Javascript 来完成复杂的任务。

例如,如果组件具有静态高度 - 您可以通过 CSS 实现它,如下例所示。但如果宽度/高度是动态的,那么你可以使用 Javascript 来实现。在 Javascript 示例中,我使用 Velocity 库来制作动画。 It's performance better than jQuery's animations 。当然你可以自己实现动画,但为什么要重新发明轮子呢?

我已经使用这两个 API 实现了 SlideUp/slideDown。看看下面的内容。

(CSS) 通过 ReactCSSTransitionGroup 实现:

const CSSTransitionGroup = React.addons.CSSTransitionGroup;
const TransitionGroup = React.addons.TransitionGroup;

class Example extends React.Component{
constructor(props) {
super(props);
this.state = { visible: false };
this.handleClick = this.handleClick.bind(this)
}

handleClick() {
this.setState({ visible: ! this.state.visible });
}

render() {
return <div>
<button onClick={this.handleClick}>{this.state.visible ? 'Slide up' : 'Slide down'}</button>
<CSSTransitionGroup transitionName="example">
{ this.state.visible ? <div className='panel' /> : null }
</CSSTransitionGroup>
</div>
}
}

React.render(<Example />, document.getElementById('container'));
.panel {
width: 200px;
height: 100px;
background: green;
margin-top: 10px;
}

.example-enter {
height: 0px;
}

.example-enter.example-enter-active {
height: 100px;
-webkit-transition: height .3s ease;
}

.example-leave.example-leave-active {
height: 0px;
-webkit-transition: height .3s ease;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react-with-addons.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>

JSFiddle - React Slide up and Slide down animation - CSS Transtion Group .

<小时/>

(Javascript)通过ReactTransitionGroup实现:

const TransitionGroup = React.addons.TransitionGroup;

class Example extends React.Component{
constructor(props) {
super(props);
this.state = { visible: false };
this.handleClick = this.handleClick.bind(this)
}

handleClick() {
this.setState({ visible: ! this.state.visible });
}

render() {
return <div>
<button onClick={this.handleClick}>{this.state.visible ? 'Slide up' : 'Slide down'}</button>
<TransitionGroup>
{ this.state.visible ? <Accordion /> : null }
</TransitionGroup>
</div>
}
}

class Accordion extends React.Component {
componentWillEnter (callback) {
const element = this.container.getDOMNode();
Velocity(element, 'slideDown', { duration: 300 }).then(callback);
}

componentWillLeave (callback) {
const element = this.container.getDOMNode();
Velocity(element, 'slideUp', { duration: 300 }).then(callback);
}

setContainer(c) {
this.container = c;
}

render() {
return <div className="panel" ref={this.setContainer.bind(this)}>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
</div>
}
}

React.render(<Example />, document.getElementById('container'));
.panel {
background: green;
margin-top: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react-with-addons.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.4.3/velocity.min.js"></script>

<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>

JSFiddle - React Slide up and Slide down animation - Javascript Transition group .

<小时/>

鸣谢:

关于javascript - 使用 React.js 的 SlideUp() 和 SlideDown() 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37677059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com