K1ファクトリー
framer-motionを使って動きのあるページ

framer-motionを使って動きのあるページ

framer-motionをインストール

$ npm install framer-motion


基本はこちらのブログを参照しています。

layout.jsで設定してあげることで、画面遷移アニメーションをお手軽にできます!
layout.js

import { motion } from 'framer-motion'

export default function Layout(props) {
  return (
    <div>
      <Head>
        <meta charSet="UTF-8" />
        <meta name="viewport" content="width=device-width" />
        <title>{props.title}</title>
        <meta name="description" content={props.description} />
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <Header />
      <motion.div
        initial={{ opacity: 0 }}
        animate={{ opacity: 1 }}
        transition={{ delay: 0.3 }}
      >
        {props.children}
      </motion.div>
      <Footer />
    </div>
  )
}


<motion.div>〜</motion.div>

部分がアニメーション指定してる部分ということです。
initial:初期値、animate:アニメーション後、transition:速度


基本的に指定してる箇所が同時に表示・アニメーションされますが、
liタグごととか、個別にアニメーションさせたい時は、以下のようにします。

import { motion } from'framer-motion'

const list = {
  visible: {
    opacity: 1,
    transition: {
      when: "beforeChildren",
      staggerChildren: 0.2,
    },
  },
  hidden: {
    opacity: 0,
    transition: {
      when: "afterChildren",
    },
  },
}

const item = {
  visible: { opacity: 1, y: 0 },
  hidden: { opacity: 0, y: 100 },
}

export default function Blog({ blog }) {
  return (
    <Layout>
      <section>
        <h1>最近の投稿</h1>
        <motion.div
          initial="hidden"
          animate="visible"
          variants={list}>
          {blog.map((blog) => (
            <motion.article variants={item} key={blog.id}>
              <Link href={`/blog/${blog.id}`}>
                <figure>
                  <a><Image src={blog.eyecatch.url} alt={blog.title} width={1600} height={600} /></a> // サムネイル表示
                </figure>
              </Link>
              <Link href={`/blog/${blog.id}`}>
                <h3><a>{blog.title}</a></h3> // タイトル表示
              </Link>
            </motion.article>
          ))}
        </motion.div>
      </section>
    </Layout>
  )
}


<motion.div>タグの中に、<motion.article>タグを設定してます。
このサイトでは、ブログ一覧表示画面になります。

ほかにもいろいろできるようですよ。
参考サイト「Framer Motion」
Framer Motion

HTML is loading comments...