附件动画API

React为动画提供了2个增大组件ReactTransitionGroup,这些附加组件是动画片的尾部API,并且还提供了多少个附件组件ReactCSSTransitionGroup,ReactCSSTransitionGroup可以简单的兑现基于css的动画和更换

React为卡通提供了三个叠加组件ReactTransitionGroup,那么些附加组件是卡通片的底部API,并且还提供了二个附件组件ReactCSSTransitionGroup,ReactCSSTransitionGroup可以不难的兑现基于css的动画和转移

高级API ReactCSSTransitionGroup

ReactCSSTransitionGroup是二个依据ReactTransitionGroup的API,当三个React组件插入大概移除DOM时,它是一种简单的去履行css转换和卡通的点子

高级API ReactCSSTransitionGroup

ReactCSSTransitionGroup是贰个基于ReactTransitionGroup的API,当3个React组件插入可能移除DOM时,它是一种简易的去实践css转换和卡通片的方式

以一个demo举例

ReactCSSTransitionGroup是ReactTransitions的接口,可以把它当作1个简短的成分,它包裹着拥有想添加动画功能的React组件。下边有一个事例:

var ReactCSSTransitionGroup = require('react-addons-css-transition-group');
    var React = require('react');
    var ReactDOM = require('react-dom');
    var data = ['one','two','three'];
    var Control = React.createClass({
        getInitialState:function(){
            return {
                'items':this.props.data
            }
        },
        addItem:function(){
            var newItems = this.state.items.concat('four');
            this.setState({
                'items':newItems
            });
        },
        removeItem:function(i){
            var newItems = this.state.items;
            newItems.splice(i,1);
            this.setState({
                'items':newItems
            });
        },
        render:function(){
            var $this = this;
            var List = this.state.items.map(function(value,index){
                return <div key={value} onClick = {$this.removeItem.bind($this,index)}> { value}</div>
            });
            return (
                <div>
                    <button onClick={this.addItem}>add Item</button>
                    <ReactCSSTransitionGroup
                        transitionName='example'
                        transitionEnterTimeout={500}
                        transitionLeaveTimeout={300}>
                        {List}
                    </ReactCSSTransitionGroup>
                </div>
            )
        }
    });
    ReactDOM.render(<Control data={data}/> ,document.getElementById('content'));

 

对例子的解释:

(1)你必要用npm安装react-addons-css-transition-group,然后经过require在文书中引入,然后赋给1个变量,在那里将以此变量命名为ReactCSSTransitionGroup,也足以不取其余名字
(2)为每1个ReactCSSTransitionGroup组件的子成分设置3个key属性,即使它唯有一个子元素。key值必须是绝无仅有的。设置三个key属性是为了让react分明卓殊子成分插入了,移除了,只怕保持。

(3)在那一个demo中,当贰个新的子成分被添加到ReactCSSTransitionGroup中,它就会博得多少个example-enter
CSS类名,随后它又会博得贰个example-enter-active
CSS类名。那个类名基于transitionName属性值。你可以使用这么些类名去完毕css动画。添加如下的css样式:

.example-enter {
      opacity: 0.01;
    }

    .example-enter.example-enter-active {
      opacity: 1;
      transition: opacity 500ms ease-in;
    }

    .example-leave {
      opacity: 1;
    }

    .example-leave.example-leave-active {
      opacity: 0.01;
      transition: opacity 300ms ease-in;
    }

 

澳门葡京官方网站,那几个样式中transition-duration值必须与ReactCSSTransitionGroup组件的transitionEnterTimeout和transitionLeave提姆eout属性值一一对应

(4)这么些时候你点击’add
Item’按钮将会以一种淡入的主意充裕八个新的子成分,点击2个曾经存在的子元素,那个被点击的子元素将会以一种退出的措施被移除。

以一个demo举例

ReactCSSTransitionGroup是ReactTransitions的接口,可以把它当作1个简便的成分,它包裹着富有想添加动画功效的React组件。下边有多个例子:

var ReactCSSTransitionGroup = require('react-addons-css-transition-group');
    var React = require('react');
    var ReactDOM = require('react-dom');
    var data = ['one','two','three'];
    var Control = React.createClass({
        getInitialState:function(){
            return {
                'items':this.props.data
            }
        },
        addItem:function(){
            var newItems = this.state.items.concat('four');
            this.setState({
                'items':newItems
            });
        },
        removeItem:function(i){
            var newItems = this.state.items;
            newItems.splice(i,1);
            this.setState({
                'items':newItems
            });
        },
        render:function(){
            var $this = this;
            var List = this.state.items.map(function(value,index){
                return <div key={value} onClick = {$this.removeItem.bind($this,index)}> { value}</div>
            });
            return (
                <div>
                    <button onClick={this.addItem}>add Item</button>
                    <ReactCSSTransitionGroup
                        transitionName='example'
                        transitionEnterTimeout={500}
                        transitionLeaveTimeout={300}>
                        {List}
                    </ReactCSSTransitionGroup>
                </div>
            )
        }
    });
    ReactDOM.render(<Control data={data}/> ,document.getElementById('content'));

 

对例子的表明:

(1)你须求用npm安装react-addons-css-transition-group,然后通过require在文件中引入,然后赋给2个变量,在此间将以此变量命名为ReactCSSTransitionGroup,也可以不取其他名字
(2)为每1个ReactCSSTransitionGroup组件的子成分设置二个key属性,固然它只有贰个子成分。key值必须是唯一的。设置二个key属性是为了让react显然那么些子成分插入了,移除了,或然保持。

(3)在那一个demo中,当二个新的子成分被添加到ReactCSSTransitionGroup中,它就会收获三个example-enter
CSS类名,随后它又会拿走3个example-enter-active
CSS类名。那么些类名基于transitionName属性值。你能够使用这些类名去贯彻css动画。添加如下的css样式:

.example-enter {
      opacity: 0.01;
    }

    .example-enter.example-enter-active {
      opacity: 1;
      transition: opacity 500ms ease-in;
    }

    .example-leave {
      opacity: 1;
    }

    .example-leave.example-leave-active {
      opacity: 0.01;
      transition: opacity 300ms ease-in;
    }

 

那一个样式中transition-duration值必须与ReactCSSTransitionGroup组件的transitionEnterTimeout和transitionLeaveTimeout属性值一一对应

(4)那么些时候你点击’add
Item’按钮将会以一种淡入的主意丰盛三个新的子成分,点击二个早已存在的子元素,那个被点击的子成分将会以一种退出的章程被移除。

Animate Initial Mounting

ReactCSSTransitionGroup提供了一个可选的性子transitionAppear,若是将以此个性设置为true,在组件的开端化装置就会添加三个外加的转移阶段。暗许情状下transitionAppear为false,如下:

 

render: function() {
        return (
          <ReactCSSTransitionGroup transitionName="example" transitionAppear={true} transitionAppearTimeout={500}>
            {list}
          </ReactCSSTransitionGroup>
        );
      }

诸如此类在早先化装载ReactCSSTransitionGroup时,它的种种子成分都会有2个example-appear
CSS类接着会有多个example-appear-active
CSS类,假若添加如下的体裁:

    .example-appear {
        opacity: 0.01;
      }

      .example-appear.example-appear-active {
        opacity: 1;
        transition: opacity .5s ease-in;
      }

在ReactCSSTransitionGroup的装载阶段就会有2个淡入的卡通片。在最先化装载阶段,每二个ReactCSSTransitionGroup子成分都是appear而不是enter,但是,子成分进入三个曾经存在的ReactCSSTransitionGroup,那些子成分是enter而不是appear

Animate Initial Mounting

ReactCSSTransitionGroup提供了一个可选的属性transitionAppear,假若将以此天性设置为true,在组件的起初化装置就会添加1个格外的更换阶段。暗中同意处境下transitionAppear为false,如下:

 

render: function() {
        return (
          <ReactCSSTransitionGroup transitionName="example" transitionAppear={true} transitionAppearTimeout={500}>
            {list}
          </ReactCSSTransitionGroup>
        );
      }

这样在初阶化装载ReactCSSTransitionGroup时,它的每种子成分都会有贰个example-appear
CSS类接着会有2个example-appear-active
CSS类,尽管添加如下的体制:

    .example-appear {
        opacity: 0.01;
      }

      .example-appear.example-appear-active {
        opacity: 1;
        transition: opacity .5s ease-in;
      }

在ReactCSSTransitionGroup的装载阶段就会有1个淡入的卡通片。在开端化装载阶段,每个ReactCSSTransitionGroup子成分都是appear而不是enter,不过,子成分进入一个早已存在的ReactCSSTransitionGroup,这些子成分是enter而不是appear

自定义类名

在上头的demo中,大家给transitionName属性设置了1个字符串example,所以,每贰个等级涉及的CSS类名都以以example先导的。大家也得以给transitionName设置二个字符串,那样可以为每一个阶段自定义类名,如下有二种设置方式:

<ReactCSSTransitionGroup
    transitionName={ {
      enter: 'enter',
      enterActive: 'enterActive',
      leave: 'leave',
      leaveActive: 'leaveActive',
      appear: 'appear',
      appearActive: 'appearActive'
    } }>
    {item}
  </ReactCSSTransitionGroup>

  <ReactCSSTransitionGroup
    transitionName={ {
      enter: 'enter',
      leave: 'leave',
      appear: 'appear'
    } }>
    {item2}
  </ReactCSSTransitionGroup>

自定义类名

在上边的demo中,我们给transitionName属性设置了一个字符串example,所以,每二个阶段涉及的CSS类名都以以example开端的。大家也可以给transitionName设置壹个字符串,那样可以为每1个品级自定义类名,如下有两种设置方法:

<ReactCSSTransitionGroup
    transitionName={ {
      enter: 'enter',
      enterActive: 'enterActive',
      leave: 'leave',
      leaveActive: 'leaveActive',
      appear: 'appear',
      appearActive: 'appearActive'
    } }>
    {item}
  </ReactCSSTransitionGroup>

  <ReactCSSTransitionGroup
    transitionName={ {
      enter: 'enter',
      leave: 'leave',
      appear: 'appear'
    } }>
    {item2}
  </ReactCSSTransitionGroup>

Animation Group Must Be Mounted To Work

为了让每二个子成分都有多少个淡入和退出的功效,子成分必须进入或离开3个早已被装载的ReactCSSTransitionGroup组件中,可能ReactCSSTransitionGroup的transitionAppear属性为true,下边那么些事例就不会有淡入和剥离的意义,因为,ReactCSSTransitionGroup和二个新的子元素被单独装载,而不是子成分载入1个曾经存在的ReactCSSTransitionGroup中。

render: function() {
        var items = this.state.items.map(function(item, i) {
          return (
            <div key={item} onClick={this.handleRemove.bind(this, i)}>
              <ReactCSSTransitionGroup transitionName="example">
                {item}
              </ReactCSSTransitionGroup>
            </div>
          );
        }, this);
        return (
          <div>
            <button onClick={this.handleAdd}>Add Item</button>
            {items}
          </div>
        );
      }

 

Animation Group Must Be Mounted To Work

为了让每3个子成分都有二个淡入和退出的功能,子成分必须进入或离开1个早已被装载的ReactCSSTransitionGroup组件中,只怕ReactCSSTransitionGroup的transitionAppear属性为true,下边那一个事例就不会有淡入和剥离的效果,因为,ReactCSSTransitionGroup和3个新的子成分被单独装载,而不是子成分载入二个曾经存在的ReactCSSTransitionGroup中。

render: function() {
        var items = this.state.items.map(function(item, i) {
          return (
            <div key={item} onClick={this.handleRemove.bind(this, i)}>
              <ReactCSSTransitionGroup transitionName="example">
                {item}
              </ReactCSSTransitionGroup>
            </div>
          );
        }, this);
        return (
          <div>
            <button onClick={this.handleAdd}>Add Item</button>
            {items}
          </div>
        );
      }

 

二个依旧0个子成分

在上头的例子中ReactCSSTransitionGroup有多个子成分,实际上,ReactCSSTransitionGroup可以唯有1个要么没有子成分,如下所示:

var ReactCSSTransitionGroup = require('react-addons-css-transition-group');

    var ImageCarousel = React.createClass({
      propTypes: {
        imageSrc: React.PropTypes.string.isRequired
      },
      render: function() {
        return (
          <div>
            <ReactCSSTransitionGroup transitionName="carousel" transitionEnterTimeout={300} transitionLeaveTimeout={300}>
              <img src={this.props.imageSrc} key={this.props.imageSrc} />
            </ReactCSSTransitionGroup>
          </div>
        );
      }
    });

 

三个依然0个子成分

在上头的例子中ReactCSSTransitionGroup有七个子成分,实际上,ReactCSSTransitionGroup可以只有2个要么没有子成分,如下所示:

var ReactCSSTransitionGroup = require('react-addons-css-transition-group');

    var ImageCarousel = React.createClass({
      propTypes: {
        imageSrc: React.PropTypes.string.isRequired
      },
      render: function() {
        return (
          <div>
            <ReactCSSTransitionGroup transitionName="carousel" transitionEnterTimeout={300} transitionLeaveTimeout={300}>
              <img src={this.props.imageSrc} key={this.props.imageSrc} />
            </ReactCSSTransitionGroup>
          </div>
        );
      }
    });

 

剥夺动画

假定你愿意,你可见禁用leave可能enter动画。例如,你想让子成分有两个enter动画而没有一个leave动画,不过在暗中同意情形下,在您移除DOM节点从前,ReactCSSTransitionGroup会等待3个动画片去完毕。你能给ReactCSSTransitionGroup设置transitionEnter={false}
可能 transitionLeave={false}去禁用那些动画片

 

 

 

 

 

剥夺动画

若是你愿意,你可见禁用leave或许enter动画。例如,你想让子成分有三个enter动画而从未1个leave动画,不过在暗许情状下,在您移除DOM节点此前,ReactCSSTransitionGroup会等待三个动画片去完结。你能给ReactCSSTransitionGroup设置transitionEnter={false}
或然 transitionLeave={false}去禁用那些动画片

 

 

 

 

 

相关文章