Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

react I want to hide the div tag when the animation is over

I'm using framer-motion for animation. When the animation pageVariants finishes, I want to hide the div tag used for the animation. Currently, when the animation is finished, the div tags are moved to the bottom of the screen so that the user can scroll vertically. I would like to make it so that users cannot scroll vertically after the animation ends. Is there any way to detect when the animation is finished?

import { motion } from 'framer-motion';
import { FunctionComponent } from 'react';

const Home: FunctionComponent = () => {
  const ease = [0.43, 0.13, 0.23, 0.96];

  const pageVariants = {
    initial: {
      y: '0',
      transition: { ease, duration: 10, delay: 0.8 },
    },
    animate: {
      y: '100%',
      transition: { ease, duration: 10 },
      transitionEnd: { display: "none",},
    },
    exit: {
      y: '0',
      opacity: 0,
      transition: { ease, duration: 10, delay: 0.8 },
    },
  };
  return (
    <>
      <div style={{ display: 'grid', gridTemplateColumns: '1fr auto' }}>
        <div className="bg-red-100 h-screen">box</div>
        <div className="bg-blue-100 w-96">box2</div>
      </div>
      <div
        style={{
          width: '300px',
          position: 'absolute',
          marginLeft: 'auto',
          marginRight: 'auto',
          bottom: 0,
          top: 0,
          left: 0,
          right: 0,
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'center',
        }}
      >
        <div>
          <img src="profile.svg" />
          <p>hello</p>
        </div>
      </div>
      <motion.div
        className="h-screen bg-white absolute z-50 w-full -top-0"
        variants={pageVariants}
      ></motion.div>
    </>
  );
};

export default Home;
like image 977
user15375616 Avatar asked Sep 19 '25 10:09

user15375616


1 Answers

In the documentation of framer-motion a transitionEnd attribute is described. If you set it to your motion div like this, it should disappear at the end of the animation:

<motion.div
        className="h-screen bg-white absolute z-50 w-full -top-0"
        variants={pageVariants}
        animate={{
          transitionEnd: {
            display: "none",
          },
        }}
      >
</motion.div>
like image 76
Mirco S. Avatar answered Sep 22 '25 04:09

Mirco S.