🐸
Next.js x Framer Motion : ページ遷移時にふわっと切り替わるアニメーション
※ SVG を扱う際は注意。公式に「現在 Chrome にはバグがあり、IntersectionObserver が SVG 要素で正しく動作しません。」とある
実装の手順
執筆時の環境: next.js 13.5.5, framer-motion 10.16.5
1. Framer Motion のインストール
npm install framer-motion
2. app/template.tsx を作成
以下の内容の template.tsx を作成。これだけで、子要素で遷移時に layout.tsx > template.tsx > その個別ページ と入れ子になり、遷移するごとにふわっと出現するアニメーション (透明度が0→1に変化) が発火する。
app/template.tsx
'use client'
import { motion } from 'framer-motion'
import React from 'react'
const variants = {
hidden: { opacity: 0 },
enter: { opacity: 1 },
}
export default function Template({ children }: { children: React.ReactNode }) {
return (
<motion.div
className='site-wrapper'
variants={variants}
initial='hidden'
animate='enter'
transition={{
type: 'linear',
duration: 2,
}}
>
{children}
</motion.div>
)
}
Discussion