Como aplicar o efeito de animação personalizado @keyframes no MaterialUI usando makestyles ()

8

Aprendi a usar animação em css usando @keyframe. No entanto, eu quero escrever meu código de animação personalizado no meu projeto de reação (Using materialUI). Meu desafio é como posso escrever o código javascript para personalizar minhas animações usando o makeStyle () no MaterialUI. Quero poder personalizar os processos de transição em porcentagens dessa vez no materialUI. Eu preciso ser capaz de escrever códigos como este em makeStyle (), mas parece que não sei como.

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

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

mykoman
fonte

Respostas:

16

Aqui está um exemplo demonstrando a keyframessintaxe 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 quadros-chave

Documentação: https://cssinjs.org/jss-syntax/?v=v10.0.0#keyframes-animation

Ryan Cogswell
fonte