Cómo aplicar el efecto de animación personalizado @keyframes en MaterialUI usando makestyles ()

8

Aprendí a usar animación en CSS usando @keyframe. Sin embargo, quiero escribir mi código de animación personalizado en mi proyecto de reacción (Uso de materialUI). Mi desafío es cómo puedo escribir el código javascript para personalizar mis animaciones usando makeStyle () en MaterialUI. Quiero poder personalizar los procesos de transición en porcentajes esta vez en materialUI. Necesito poder escribir códigos como este en makeStyle () pero parece que no sé cómo hacerlo.

@keyframes myEffect {
 0%{
  opacity:0;
  transform: translateY(-200%); 
 }

100% {
  opacity:1;
  transform: translateY(0);
 }
}

mykoman
fuente

Respuestas:

16

Aquí hay un ejemplo que demuestra la keyframessintaxis dentro de makeStyles:

import React from "react";
import ReactDOM from "react-dom";

import { makeStyles } from "@material-ui/core/styles";
import Button from "@material-ui/core/Button";
import clsx from "clsx";

const useStyles = makeStyles(theme => ({
  animatedItem: {
    animation: `$myEffect 3000ms ${theme.transitions.easing.easeInOut}`
  },
  animatedItemExiting: {
    animation: `$myEffectExit 3000ms ${theme.transitions.easing.easeInOut}`,
    opacity: 0,
    transform: "translateY(-200%)"
  },
  "@keyframes myEffect": {
    "0%": {
      opacity: 0,
      transform: "translateY(-200%)"
    },
    "100%": {
      opacity: 1,
      transform: "translateY(0)"
    }
  },
  "@keyframes myEffectExit": {
    "0%": {
      opacity: 1,
      transform: "translateY(0)"
    },
    "100%": {
      opacity: 0,
      transform: "translateY(-200%)"
    }
  }
}));

function App() {
  const classes = useStyles();
  const [exit, setExit] = React.useState(false);
  return (
    <>
      <div
        className={clsx(classes.animatedItem, {
          [classes.animatedItemExiting]: exit
        })}
      >
        <h1>Hello CodeSandbox</h1>
        <h2>Start editing to see some magic happen!</h2>
        <Button onClick={() => setExit(true)}>Click to exit</Button>
      </div>
      {exit && <Button onClick={() => setExit(false)}>Click to enter</Button>}
    </>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Editar fotogramas clave

Documentación: https://cssinjs.org/jss-syntax/?v=v10.0.0#keyframes-animation

Ryan Cogswell
fuente