2

I'm trying to use gsap for the animations and want to call these on the functions provided. Entering ones work but can't get the exiting and exited ones to fire. i'm setting a state variable on click to change in to false but its not rerendering. Am i missing something cause i can't see anything in the documentation

constructor(props) {
    super(props);
    this.state = {in: true};

    this.handleClick = this.handleClick.bind(this);
  }
  onEnter(node, isAppearing, event) {
    console.log("on enter")
    TweenMax.killTweensOf(node);
    TweenLite.set(node, {
      x: '800px',
      onCompleteParams: [node]
    });
    // animate in the element
    TweenLite.to(node, 1, {
      x: '0px',
      onCompleteParams: [node]
    });
  }

  onEntered() {
    console.log("on entered")
  }

  onExit() {
    console.log("on exit")
  }

  onExiting() {
    console.log("on exiting")
  }

  handleClick(e) {
    e.preventDefault();
    this.setState({ in: false });
    console.log("click")

  }

  render() {
    const show  = this.state.in;

    return (

          <div className="row">
            <div className={styles.items}>
            <TransitionGroup>
              <Transition
                timeout={{
                  enter: 300,
                  exit: 500,
                 }}
                appear={true}
                in={show}

                onEntered={this.onEntered}
                onExiting={this.onExiting}
                onExit={this.onExit}
                onEnter={(node, isAppearing, event) => {
                  this.onEnter(node, isAppearing, event)
                 }}
                >
                <Link
                    to="/sub-page"
                    className={styles.item}
                    onClick={this.handleClick}
                  >
                    <div className={styles.itemimagecontainer}>
                      <img
                        src={image}
                        className={styles.itemimage}
                        alt="Sonovate"
                      />
                    </div>
                    <div className={styles.itemcontent}>
                      <h3 className="heading-small">Title</h3>
                    </div>
                  </Link>
              </Transition>
            </TransitionGroup>
</div>
</div>

Edit: Just to add more information about the build in my app.js i have this

return (
      <Router>
        <div>
        <TransitionGroup>
          <Transition
              timeout={500}
              appear={true}
              mountOnEnter={true}
              unmountOnExit={false}
              onEnter={(node, isAppearing, event) => {
               this.onEnter(node, isAppearing, event)
              }}
              onExit={(node) =>{
                this.onExit(node)
              }}
            >
            <div id={"wrapper"} style={divStyle}>
              <Header toScroll={this.toScroll}></Header>
              <Route path="/" render={props => <AppRoutes {...props}/> }/>
              <ScrollTop className={this.props.className} onClick={this.scrollTop}></ScrollTop>
            </div>
          </Transition>
        </TransitionGroup>
        <Canvas></Canvas>
        </div>
      </Router>
    );

So that does a nice little transition on the overall page and the previous code at the top is part of a route (home page)

Adam
  • 1,136
  • 8
  • 26
  • 51

0 Answers0