makestyles()を使用してMaterialUIでカスタムアニメーション効果@キーフレームを適用する方法


8

@keyframeを使用してCSSでアニメーションを使用する方法を学びました。しかし、私のカスタムアニメーションコードを自分のreactプロジェクト(materialUIを使用)に書きたいと思います。私の課題は、MaterialUIのmakeStyle()を使用して、アニメーションをカスタム化するJavaScriptコードをどのように書くことができるかです。今回は、MaterialUIで遷移プロセスをパーセンテージでカスタマイズできるようにしたいと思います。makeStyle()でこのようなコードを記述できるようにする必要がありますが、その方法がわかりません。

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

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

回答:


16

keyframes内の構文を示す例を次に示します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);

キーフレームを編集する

ドキュメント:https : //cssinjs.org/jss-syntax/?v=v10.0.0#keyframes-animation

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.