Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用React.js制作slideUp()和slideDown()动画_Javascript_Jquery_Reactjs - Fatal编程技术网

Javascript 使用React.js制作slideUp()和slideDown()动画

Javascript 使用React.js制作slideUp()和slideDown()动画,javascript,jquery,reactjs,Javascript,Jquery,Reactjs,我创建了一个react组件,它由slideUp()和slideDown()动画组成。我已经使用jqueryslideup和slidedown方法实现了 我必须使用react动画实现此功能 我读到了关于反应传递组和反应传递组的文章。解释的方式教会了我,我们可以在DomNode挂载到组件或卸载时执行此功能(如果我错了,请纠正我) 我的问题是-->如何以react方式执行slideup()和slidedown(),而不使用jQuery 查看此JSFIDLE以了解更多信息 请给我解释一下,为什么与jQu

我创建了一个react组件,它由slideUp()和slideDown()动画组成。我已经使用jqueryslideup和slidedown方法实现了

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

我读到了关于反应传递组和反应传递组的文章。解释的方式教会了我,我们可以在DomNode挂载到组件或卸载时执行此功能(如果我错了,请纠正我)

我的问题是-->如何以react方式执行slideup()和slidedown(),而不使用jQuery

查看此JSFIDLE以了解更多信息

请给我解释一下,为什么与jQuery相比,react动画部分似乎有点难(我是一个jQuery的家伙)

var Hello=React.createClass({
getInitialState:函数(){
返回{
幻灯片:错,
}
},
幻灯片:函数(){
如果(此.state.slide){
$(this.refs.slide).slideDown();
这是我的国家({
幻灯片:错
});
}否则{
$(this.refs.slide).slideUp();
这是我的国家({
幻灯片:对
});
}
},
render:function(){
报税表(


); } }); ReactDOM.render(, document.getElementById('容器') );
您可以在两个动画的API中实现动画。主要区别如下:

ReactTransitionGroup是在其上创建ReactCSTranslationGroup的API 建造。两者的主要区别在于 ReactTransitionGroup动画是用Javascript编写的,而不是 CSS,并且提供了一个回调,以便在动画被调用时调用 完成而不是依赖CSS转换事件

我的结论是,简单任务使用CSS动画,复杂任务使用Javascript

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

我已经用这两个API实现了slideUp/slideDown。看看下面

(CSS)通过ReactCSTransanitionGroup实现:
const cstransitiongroup=React.addons.cstransitiongroup;
const TransitionGroup=React.addons.TransitionGroup;
类示例扩展了React.Component{
建造师(道具){
超级(道具);
this.state={visible:false};
this.handleClick=this.handleClick.bind(this)
}
handleClick(){
this.setState({visible:!this.state.visible});
}
render(){
返回
{this.state.visible?'Slide-up':'Slide-down'}
{this.state.visible?:null}
}
}
React.render(,document.getElementById('container')
.panel{
宽度:200px;
高度:100px;
背景:绿色;
边缘顶部:10px;
}
.输入示例{
高度:0px;
}
.example-enter.example-enter-active{
高度:100px;
-webkit过渡:高度。3s轻松;
}
.example-leave.example-leave-active{
高度:0px;
-webkit过渡:高度。3s轻松;
}

应乔丹·埃涅夫的要求,我用叉子叉了他的胳膊

这里有一个解决方案,它不需要任何转换组。 我个人是班级服装的爱好者。也就是说,你可以创建css动画,无论你喜欢它是什么

(小提琴中的整个代码)

类示例扩展了React.Component{
建造师(道具){
超级(道具);
this.state={visible:'panel'};
this.handleClick=this.handleClick.bind(this)
}
handleClick(){
this.setState({visible:this.state.visible=='panel'?'panel visible':'panel'});
}
render(){
返回
{!this.state.visible=='panel'?'Slide up':'Slide down'}
这是一些动态内容

知识产权是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利,是一种权利elitr说,这是一个暂时的不可侵犯的事实,它是一个不可侵犯的事实,它是一个不可侵犯的事实

} } React.render(,document.getElementById('container');
我知道这样使用visible state变量是不好的,但是我正在工作,没有太多的时间去改变太多。请注意,我们使用visible类通过动画切换div容器


一般来说。动态高度容器可以使用css中的max height属性设置动画

如果您(像我一样)来这里寻找一个react替代jQuery的
slideDown
/
slideUp
,那么似乎是一个易于使用的react组件。它的github页面有一个演示示例代码

只是好奇:你为什么不想在这里使用jQuery?@Chris我可以在jQuery的帮助下做到这一点。我很好奇如何在react组件的静态内容的reactTransitionAPI中实现这一点。最终,我们可以通过使用react Way避免不必要的重新渲染。如果面板没有固定高度怎么办?.Invisible{max height:0%;overflow:hidden;}.visible{max-h
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')
);
class Example extends React.Component{
    constructor(props) {
        super(props);
        this.state = { visible: 'panel' };
        this.handleClick = this.handleClick.bind(this)
    }

    handleClick() {
        this.setState({ visible: this.state.visible == 'panel'? 'panel visible' : 'panel' });
    }

    render() {
        return <div>
            <button onClick={this.handleClick}>{!this.state.visible == 'panel' ? 'Slide up' : 'Slide down'}</button>
                <div className={this.state.visible}>
                <p>This is some dynamic content!</p>
                <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
              </div>
        </div>
    }
}

React.render(<Example />, document.getElementById('container'));