在滚动时触发ReactCSSTransitionGroup

时间:2017-03-05 18:38:40

标签: javascript css3 reactjs reactcsstransitiongroup

我一直试图弄清楚如何在滚动时触发react css过渡组。假设我有一堆组件,这个例子被渲染出屏幕:

// component.jsx

import React from 'react'
import ReactCSSTransitionGroup from 'react-addons-css-transition-group'
import './style.css'
export default class extends React.Component {
    constructor() {
    super()
    this.state = {
      title: ['an off screen title']}
    }
    render() {
    const displayText = this.state.title.map(i => <h1 key={i}>{i.title}</h1>)
      return (
        <ReactCSSTransitionGroup
            transitionName='atxt'
            transitionEnterTimeout={1000}
            transitionLeaveTimeout={1000}>
          {displayText}
        </ReactCSSTransitionGroup>
      )
    }
}

// style.css

.atxt-enter {
  opacity: 0.01;
}
.atxt-enter.atxt-enter-active {
  opacity: 1;
  transition: opacity 1000ms ease-in;
}
.atxt-leave {
  opacity: 1;
}
.atxt-leave.atxt-leave-active {
  opacity: 0.01;
  transition: opacity 1000ms ease-in;
}

我希望转换组在进入视图时触发,而不是在最初渲染组件时触发。 我一直在仔细考虑文档和探索预制的库/组件来实现这一目标,但没有找到任何不涉及引入大型动画库的东西......我知道在我的鸟蛤中有一种方法可以做到这一点,因此,在这里询问专业人士。干杯你好。

1 个答案:

答案 0 :(得分:5)

只是抛出一个想法:

滚动到特定元素时,使用https://github.com/brigade/react-waypoint将组件添加到DOM。

handleWaypointEnter

<ReactCSSTransitionGroup>...</ReactCSSTransitionGroup>中,将.controller('AudioCtrl', function($scope, Audio, AudioSockets) { $scope.audioSockets = AudioSockets.list; $scope.$watch(function() {return AudioSockets.list}, function () { $scope.audioSockets = AudioSockets.list; console.log(AudioSockets.list); }); 添加到dom中。这应该有效,根据docs它在进入dom时应用动画。