😎
Onemorebottlee's TIL
  • πŸ€“Introduce
  • πŸ“–DevLog
    • πŸ’£Error
      • npm ERR! Cannot read properties of null (reading 'edgesOut')
      • git
        • src refspec main does not match any
      • NextJS
        • No img element
        • ReferenceError : document is not defined
        • `next/image` Un-configured Host
  • πŸ“ΊLecture
    • Nomad Coders
      • 초보자λ₯Ό μœ„ν•œ λ¦¬λ•μŠ€ 101
        • #0 Introduction
        • #1 PURE REDUX: COUNTER
        • #2 PURE REDUX: TO DO LIST
        • #3 REACT REDUX
        • #4 Redux Toolkit
      • 바닐라 JS둜 κ·Έλ¦Ό μ•± λ§Œλ“€κΈ°
      • React JS λ§ˆμŠ€ν„° 클래슀
        • #2 Styled Componnents
        • #3 TypeScript
        • #4 Crypto Tracker
        • #5 State Management
        • #6 Trello
        • #7 ANIMATIONS
      • Next.js μ‹œμž‘ν•˜κΈ°
        • #0 INTRODUCTION
        • #1 FRAMEWORK OVERVIEW
        • #2 PRACTICE PROJECT
      • Typescript둜 블둝체인 λ§Œλ“€κΈ°
        • #1 Introduction
        • #2 Overview of TypeScript
        • #3 Functions
        • #4 Classes and Interfaces
        • #5 TypeScript Blockchain
      • SQL Master Class
        • #1 Introduction
        • #2 SQLite
        • #3 Data Definition Language
        • #4 Data Manipulation Language
        • #5 Subqueries and CTEs
        • #6 Indexes
        • #7 MySQL
        • #8 Foreign Keys
        • #9 JOINS
        • #10 Nomalization
        • #11 Events & Triggers
        • #12 Full-Text Indexes
        • #13 PostgreSQL
        • #14 Functions And Procedures
        • #15 Transactions
        • #16 Data Control Language
        • #17 PostgreSQL JSON Columns
        • #18 PostgreSQL Extensions
        • #19 MongoDB
        • #20 REDIS
        • #21 Javascript and Python Drivers
    • Udemy
      • TypeScript λ§ˆμŠ€ν„° with Webpack & React
        • [S1] μ†Œκ°œ
        • [S2] μ„€μΉ˜ 및 μ„€μ •
        • [S3] νƒ€μž… μ• λ„ˆν…Œμ΄μ…˜ 기초
        • [S4] ν•¨μˆ˜
        • [S5] 객체 νƒ€μž…
        • [S6] λ°°μ—΄ νƒ€μž…
        • [S7] μœ λ‹ˆμ˜¨νƒ€μž…
        • [S8] Tuple & Enum
        • [S9] μΈν„°νŽ˜μ΄μŠ€
        • [S10] TypeScript 컴파일러
        • [S11] λ―Έλ‹ˆ ν”„λ‘œμ νŠΈ DOM, νƒ€μž… 단언, 그리고 더 λ§Žμ€ λ‚΄μš©
        • [S12] Class
        • [S13] TS Class
        • [S14] Generics ⭐⭐⭐⭐⭐
        • [S15] Narrowing
        • [S16] Type Declarations
        • [S17] Module
        • [S18] Webpack κ³Ό TypeScript
        • [S19] React
    • λͺ¨λ‘λ₯Ό μœ„ν•œ 컴퓨터 κ³Όν•™ CS50
      • 1. μ»΄ν“¨νŒ… 사고
      • 2. Cμ–Έμ–΄
      • 3. λ°°μ—΄
      • 4. μ•Œκ³ λ¦¬μ¦˜
      • 5. λ©”λͺ¨λ¦¬
      • 6. 자료ꡬ쑰
    • μƒν™œμ½”λ”©
      • DATABASE
        • DATABASE1
  • πŸ“šBook
    • λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive
      • 1μž₯ ν”„λ‘œκ·Έλž˜λ°
      • 2μž₯ μžλ°”μŠ€ν¬λ¦½νŠΈλž€?
      • 3μž₯ μžλ°”μŠ€ν¬λ¦½νŠΈ 개발 ν™˜κ²½κ³Ό μ‹€ν–‰ 방법
      • 4μž₯ λ³€μˆ˜
      • 5μž₯ ν‘œν˜„μ‹κ³Ό λ¬Έ
      • 6μž₯ 데이터 νƒ€μž…
      • 7μž₯ μ—°μ‚°μž
      • 8μž₯ μ œμ–΄λ¬Έ
      • 9μž₯ νƒ€μž… λ³€ν™˜κ³Ό 단좕 평가 ⭐⭐⭐
      • 10μž₯ 객체 λ¦¬ν„°λŸ΄
      • 11μž₯ μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ
      • 12μž₯ ν•¨μˆ˜ ⭐⭐⭐⭐
      • 13μž₯ μŠ€μ½”ν”„
      • 14μž₯ μ „μ—­ λ³€μˆ˜μ˜ 문제점
      • 15μž₯ let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„ ⭐⭐⭐
      • 16μž₯ ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ
      • 17μž₯ μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•œ 객체 생성
      • 18μž₯ ν•¨μˆ˜μ™€ 일급 객체 ⭐⭐
      • 19μž₯ ν”„λ‘œν† νƒ€μž… ⭐⭐⭐⭐⭐
      • 20μž₯ strict mode
      • 21μž₯ 빌트인 객체 ⭐
      • 22μž₯ this ⭐⭐⭐
      • 23μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
      • 24μž₯ ν΄λ‘œμ € ⭐⭐⭐⭐⭐⭐⭐
      • 25μž₯ 클래슀
      • 26μž₯ ES6 ν•¨μˆ˜μ˜ μΆ”κ°€ κΈ°λŠ₯
      • 27μž₯ λ°°μ—΄ ⭐⭐⭐
      • 28μž₯ Number
      • 29μž₯ Math
      • 30μž₯ Date
      • 31μž₯ RegExp
      • 32μž₯ String
      • 33μž₯ 7번째 데이터 νƒ€μž… Symbol
      • 34μž₯ μ΄ν„°λŸ¬λΈ”
      • 35μž₯ μŠ€ν”„λ ˆλ“œ 문법
      • 36μž₯ λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ή
      • 37μž₯ Setκ³Ό Map
      • 38μž₯ λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ 과정⭐⭐⭐⭐⭐⭐⭐⭐
      • 39μž₯ DOM ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
      • 40μž₯ 이벀트⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
      • 41μž₯ 타이머
      • 42μž₯ 비동기 ν”„λ‘œκ·Έλž˜λ° ⭐⭐⭐⭐⭐⭐⭐⭐
      • 43μž₯ Ajax
      • 44μž₯ REST API
      • 45μž₯ ν”„λ‘œλ―ΈμŠ€
      • 46μž₯ μ œλ„ˆλ ˆμ΄ν„°μ™€ async/await
      • 47μž₯ μ—λŸ¬ 처리
      • 48μž₯ λͺ¨λ“ˆ
      • 49μž₯ Babelκ³Ό Webpack을 μ΄μš©ν•œ ES6+/ES.NEXT 개발 ν™˜κ²½ ꡬ좕
    • λŸ¬λ‹ νƒ€μž…μŠ€ν¬λ¦½νŠΈ
      • Ch.1 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ
      • Ch.2 νƒ€μž… μ‹œμŠ€ν…œ
      • Ch.3 μœ λ‹ˆμ–Έκ³Ό λ¦¬ν„°λŸ΄
      • Ch.4 객체
      • Ch.5 ν•¨μˆ˜
      • Ch.6 λ°°μ—΄
      • Ch.7 μΈν„°νŽ˜μ΄μŠ€
      • Ch.8 클래슀
      • Ch.9 νƒ€μž… μ œν•œμž
      • Ch.10 μ œλ„€λ¦­
      • Ch.11 μ„ μ–Έ 파일
      • Ch.12 IDE κΈ°λŠ₯ μ‚¬μš©
      • Ch.13 ꡬ성 μ˜΅μ…˜
      • Ch.14 ꡬ문 ν™•μž₯
      • Ch.15 νƒ€μž… 운영
      • μš©μ–΄ 사전
    • μžλ°”μŠ€ν¬λ¦½νŠΈ μ™„λ²½ κ°€μ΄λ“œ
    • SQL in 10 Minutes
      • 1μž₯ SQL μ΄ν•΄ν•˜κΈ°
      • 2μž₯ 데이터 κ°€μ Έμ˜€κΈ°
      • 3μž₯ κ°€μ Έμ˜¨ 데이터 μ •λ ¬ν•˜κΈ°
      • 4μž₯ 데이터 필터링
      • 5μž₯ κ³ κΈ‰ 데이터 필터링
      • 6μž₯ μ™€μΌλ“œμΉ΄λ“œ 문자λ₯Ό μ΄μš©ν•œ 필터링
      • 7μž₯ 계산 ν•„λ“œ μƒμ„±ν•˜κΈ°
      • 8μž₯ 데이터 μ‘°μž‘ ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
      • 9μž₯ 데이터 μš”μ•½
      • 10μž₯ 데이터 κ·Έλ£Ήν•‘
      • 11μž₯ μ„œλΈŒμΏΌλ¦¬ μ‚¬μš©ν•˜κΈ°
      • 12μž₯ ν…Œμ΄λΈ” 쑰인
      • 13μž₯ κ³ κΈ‰ ν…Œμ΄λΈ” 쑰인 μƒμ„±ν•˜κΈ°
      • 14μž₯ 쿼리 κ²°ν•©ν•˜κΈ°
      • 15μž₯ 데이터 μ‚½μž…ν•˜κΈ°
      • 16μž₯ 데이터 μ—…λ°μ΄νŠΈμ™€ μ‚­μ œ
      • 17μž₯ ν…Œμ΄λΈ” 생성과 μ‘°μž‘
      • 18μž₯ λ·° μ‚¬μš©ν•˜κΈ°
      • 19μž₯ μ €μž₯ ν”„λ‘œμ‹œμ € μ‚¬μš©ν•˜κΈ°
      • 20μž₯ νŠΈλžœμž­μ…˜ 처리 κ΄€λ¦¬ν•˜κΈ°
      • 21μž₯ μ»€μ„œ μ‚¬μš©ν•˜κΈ°
      • 22μž₯ κ³ κΈ‰ 데이터 μ‘°μž‘ μ˜΅μ…˜
    • 면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ
      • 4 λ°μ΄ν„°λ² μ΄μŠ€
        • 4.1 λ°μ΄ν„°λ² μ΄μŠ€μ˜ κΈ°λ³Έ
    • 2023 이기적 SQL 개발자 μ΄λ‘ μ„œ + 기좜문제
      • 데이터 λͺ¨λΈλ§ 이해
        • S1. 데이터 λͺ¨λΈλ§
  • πŸ’»Study
    • CS 지식 λ°œν‘œ
      • 1회차
      • 2회차
      • 3회차
      • 4회차
      • 5회차
      • 6회차
      • 7회차
      • 8회차
      • 9회차
    • TypeScript Exercises
      • Ex 1
      • Ex 2
      • Ex 3
      • Ex 4
      • Ex 5
      • Ex 6
      • Ex 7
      • Ex 8
      • Ex 9
      • Ex 10
  • πŸ”„ETC
    • Article
      • Atomic Design Pattern
      • ν”„λ‘ νŠΈμ—”λ“œ 개발자
    • DATABASE
      • Oracle
        • CEIL() & FLOOR() - μ†Œμˆ˜μ  올림 & λ‚΄λ¦Ό
        • DUAL ν…Œμ΄λΈ” - μž„μ‹œ ν…Œμ΄λΈ”λ‘œ κ²°κ³Ό ν™•μΈν•˜κΈ°
    • Ubuntu
      • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ—…λ°μ΄νŠΈ
Powered by GitBook
On this page
  • #7.1
  • #7.2 Animation
  • #7.3 Variants part
  • #7.4
  • #7.5 Gestures
  • #7.7 MotionValues
  • #7.8 useTransform
  • #7.9 useScroll
  • #7.a package.json ν•œλ²ˆμ— μ—…λ°μ΄νŠΈν•˜κΈ°
  • #7.10 SVG Animation
  • #7.11 AnimatePresence
  • #7.12 ~ 13 Slider
  • #7.13
  • #7.14
  • #7.15
  • #7.16

Was this helpful?

  1. Lecture
  2. Nomad Coders
  3. React JS λ§ˆμŠ€ν„° 클래슀

#7 ANIMATIONS

Previous#6 TrelloNextNext.js μ‹œμž‘ν•˜κΈ°

Last updated 1 year ago

Was this helpful?

#7.1

Framer Motion

React용 production-ready λͺ¨μ…˜ 라이브러리 (μ˜€ν”ˆ μ†ŒμŠ€)

npm i framer-motion

import { motion } from "framer-motion”

motion μ‚¬μš©μ‹œ 기쑴의 <div> 은 μ‚¬μš©ν•  수 μ—†μŒ

<motion.div> 둜 μ‚¬μš©ν•΄μ•Όν•¨

CRACO

CRACO(Create React App Configuration Override)λŠ” create-react-app을 μœ„ν•œ 쉽고 μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ configuration λ ˆμ΄μ–΄μž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ root에 단일 configuration(예: craco.config.js) νŒŒμΌμ„ μΆ”κ°€ν•˜κ³  eslint, babel, postcss configuration 등을 μ‚¬μš©μž μ§€μ •ν•˜μ—¬ 'eject'λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  create-react-app 및 μ‚¬μš©μž μ§€μ •μ˜ λͺ¨λ“  이점을 μ–»μœΌμ‹­μ‹œμ˜€.

craco.config.js


module.exports = {

webpack: {

configure: {

module: {

rules: [

{

type: 'javascript/auto',

test: /\\.mjs$/,

include: /node_modules/,

},

],

},

},

},

}

#7.2 Animation

Framer Motion의 μ• λ‹ˆλ©”μ΄μ…˜μ€ λͺ¨μ…˜ μ»΄ν¬λ„ŒνŠΈμ˜ μœ μ—°ν•œ animate 속성을 톡해 μ œμ–΄λœλ‹€.

κ°„λ‹¨ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ€ animate propsμ—μ„œ 직접 값을 μ„€μ •ν•  수 μžˆλ‹€.

initial - μ‹œμž‘ / transition - λ³€ν™” 방법 / animate - μ’…λ£Œ

#7.3 Variants part

Variants μ—¬λŸ¬ μ• λ‹ˆλ©”μ΄μ…˜μ„ ν•©μΉ  수 있음 & κΉ”λ”ν•œ μ½”λ“œ

const variant = {
    start: {},
    end: {}
}

motion.div variant={variant} initial=β€œstart” end=”end”

#7.4

λΆ€λͺ¨ μš”μ†Œμ˜ μ• λ‹ˆλ©”μ΄μ…˜κ³Ό propsλ₯Ό μžμ‹ μš”μ†Œμ—λ„ μ „λ‹¬ν•œλ‹€.

& 각 μžμ‹ μš”μ†Œμ— 각각 λ”œλ ˆμ΄ μ£ΌλŠ” λ“±μ˜ 미친 κΈ°λŠ₯도 κ°€λŠ₯ν•˜λ‹€.

delayChildren: λ”œλ ˆμ΄ μ‹œκ°„(초) ν›„ ν•˜μœ„ μ• λ‹ˆλ©”μ΄μ…˜ μ‹œμž‘

staggerChildren: ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈμ˜ μ• λ‹ˆλ©”μ΄μ…˜μ— 지속 μ‹œκ°„(초)만큼 μ‹œμ°¨ 예λ₯Ό λ“€μ–΄, staggerChildren이 0.01이면 첫 번째 μžμ‹μ€ 0초, 두 번째 μžμ‹μ€ 0.01초, μ„Έ 번째 μžμ‹μ€ 0.02초 μ§€μ—°. κ³„μ‚°λœ stagger λ”œλ ˆμ΄κ°€ delayChildren에 μΆ”κ°€λœλ‹€.

inherit: boolean

λΆ€λͺ¨λ‘œλΆ€ν„° variant λ³€κ²½ 사항을 μƒμ†ν•˜μ§€ μ•Šλ„λ‘ ν•˜λ €λ©΄ false둜 μ„€μ •.

#7.5 Gestures

whileHover - ν˜Έλ²„ μ€‘μΌλ•Œ μž‘λ™ν•  μ• λ‹ˆλ©”μ΄μ…˜

whileTap - 클릭 μ€‘μΌλ•Œ μž‘λ™ν•  μ• λ‹ˆλ©”μ΄μ…˜

Drag

drag: boolean | β€œx” | β€œy”

끌기 ν™œμ„±ν™”- κΈ°λ³Έ false μ–‘λ°©ν–₯ λ“œλž˜κ·Έλ₯Ό μ›ν•˜λ©΄ true, νŠΉμ • λ°©ν–₯으둜 ν•˜λ €λ©΄ x or y μ„€μ •

whileDrag - λ“œλž˜κ·Έ μ€‘μΌλ•Œ μž‘λ™ν•  μ• λ‹ˆλ©”μ΄μ…˜

dragConstraints - λ“œλž˜κ·Έκ°€ ν—ˆμš©λ˜λŠ” λ²”μœ„ (1. ν”½μ…€ 크기 이용 2. ref 이용)

dragSnapToOrigin - μ›λž˜ 자리둜 λŒμ•„κ°

dragElastic - μ™ΈλΆ€ μ œμ•½ μ‘°κ±΄μ—μ„œ ν—ˆμš©λ˜λŠ” 이동 정도 0=μ›€μ§μž„ μ—†μŒ 1=전체 μ›€μ§μž„ κΈ°λ³Έ 0.5 falseκ°€λŠ₯

#7.7 MotionValues

νŠΉμ • 값을 μΆ”μ ν•˜μ§€λ§Œ stateκ°€ μ•„λ‹ˆλ‹€?!

.set() .get() λ©”μ„œλ“œλ‘œ 값을 μ—…λ°μ΄νŠΈν•˜κ±°λ‚˜ μ§€μ •ν•  수 μžˆλ‹€.

#7.8 useTransform

νŠΉμ •κ°’μ„ λ‹€λ₯Έ κ°’μœΌλ‘œ λ³€ν™˜ν•΄μ€€λ‹€.

useTransform(x, input, output) β‡’ x의 값을 input λ²”μœ„μ—μ„œ output λ²”μœ„λ‘œ λ³€ν™˜ν•œλ‹€.

#7.9 useScroll

λ·°ν¬νŠΈκ°€ 슀크둀 될 λ•Œ μ—…λ°μ΄νŠΈλ˜λŠ” MotionValues 값을 λ¦¬ν„΄ν•œλ‹€.

scrollX - μ‹€μ œ μˆ˜ν‰ 슀크둀 ν”½μ…€

scrollY - μ‹€μ œ 수직 슀크둀 ν”½μ…€

scrollXProgress - 0~1 μ‚¬μ΄μ˜ μˆ˜ν‰ 슀크둀

scrollYProgress - 0~1 μ‚¬μ΄μ˜ 수직 슀크둀

이 값을 μ΄μš©ν•΄ 슀크둀 μœ„μΉ˜μ— 따라 μ• λ‹ˆλ©”μ΄μ…˜μ„ μΆ”κ°€ν•  수 있음 !!


#7.a package.json ν•œλ²ˆμ— μ—…λ°μ΄νŠΈν•˜κΈ°

npm-check-updates μ‚¬μš©

npm install -g npm-check-updates // νŒ¨ν‚€μ§€ μ„€μΉ˜

ncu -u // μ—…λ°μ΄νŠΈ κ°€λŠ₯ν•œ ν•­λͺ© 확인

npm install // μ—…λ°μ΄νŠΈ

#7.10 SVG Animation

fontAwsome μ—μ„œ svg 파일 κ°€μ Έμ˜€κΈ°

path(SVG) β‡’ λͺ¨μ–‘을 μ •μ˜ν•˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈ

transition 각각 쀄 수 있음 γ…γ…Šγ„· !

Line drawing

svg μ—˜λ¦¬λ¨ΌνŠΈμ— 'pathLength', 'pathSpacing', 'pathOffset' 속성을 μ‚¬μš©ν•˜μ—¬ Line drawing μ• λ‹ˆλ©”μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

path (SVG)

path SVG μ—˜λ¦¬λ¨ΌνŠΈλŠ” λͺ¨μ–‘을 μ •μ˜ν•˜λŠ” 일반 μ—˜λ¦¬λ¨ΌνŠΈμž…λ‹ˆλ‹€.λͺ¨λ“  κΈ°λ³Έ λͺ¨μ–‘은 path μ—˜λ¦¬λ¨ΌνŠΈλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

path의 속성 dλŠ” 경둜의 λͺ¨μ–‘을 μ •μ˜ν•©λ‹ˆλ‹€.

Path

motion.path μ»΄ν¬λ„ŒνŠΈλŠ” μ„Έ κ°€μ§€ κ°•λ ₯ν•œ SVG path 속성인 pathLength, pathSpacing 및 pathOffset을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. μˆ˜λ™ 경둜 츑정이 ν•„μš” 없이 λͺ¨λ‘ 0κ³Ό 1 μ‚¬μ΄μ˜ κ°’μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.

Line drawing

μ„  그리기 μ• λ‹ˆλ©”μ΄μ…˜μ€ pathLength, pathSpacing 및 pathOffset의 μ„Έ κ°€μ§€ 특수 속성을 μ‚¬μš©ν•˜μ—¬ λ§Žμ€ SVG μš”μ†Œλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

ex) motion.circle initial={{ pathLength: 0 }} animate={{ pathLength: 1 }}

  • μ½”λ“œ

    const Svg = styled.svg`
      width: 300px;
      height: 300px;
      color: white;
      stroke: white;
      stroke-width:3;
    `
    const svg = {
      start: {
        fill: "rgba(255,255,255,0)",
        pathLength: 0
      },
      end: {
        fill: "rgba(255, 255, 255, 1)",
        pathLength: 1,
      }
    }
    
    return 
    	...
    			<Svg
            xmlns="<http://www.w3.org/2000/svg>"
            viewBox="0 0 488 512">
            <motion.path
              variants={svg}
              initial="start"
              animate="end"
              transition={{
                default: { duration: 3 },
                fill: { duration: 2, delay: 3 }
              }}
              d="M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z" />
          </Svg>

#7.11 AnimatePresence

쑰건뢀 showing

<AnimatePresence></AnimatePresence> 사이에 쑰건뢀 λ“±μž₯&μ‚­μ œ κΈ°λŠ₯이 있으면 animate κΈ°λŠ₯

initial=””, animate=””, exit=””

exit - μ‚¬λΌμ§ˆλ•Œ λ°œμƒν•  μ• λ‹ˆλ©”μ΄μ…˜

  • μ½”λ“œ

    import { AnimatePresence } from "framer-motion";
    
    const boxxVariants = {
      start: {
        opacity: 0,
        scale: 0
      },
      end: {
        opacity: 1,
        scale: 1,
        rotateZ: 360
      },
      leaving: {
        opacity: 0,
        scale: 0,
        y: 50
      }
    }
    
    function ...
    	const [showing, setShowing] = useState(false);
      const toggleShowing = () => setShowing((prev) => !prev)
    
    return 
    		...
    		<button onClick={toggleShowing}>Click</button>
    		      <AnimatePresence >
    		        {showing ? <Box variants={boxxVariants} initial="start" animate="end" exit="leaving" /> : null}
    		      </AnimatePresence>

#7.12 ~ 13 Slider

next

prev

#7.13

custom

각 μ• λ‹ˆλ©”μ΄μ…˜ μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•΄ 동적 variants λ₯Ό λ‹€λ₯΄κ²Œ μ μš©ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ‚¬μš©μž μ§€μ • 데이터

  • μ½”λ“œ

    const Box = styled(motion.div)`
      width: 400px;
      height: 200px;
      display: flex;
      justify-content: center;
      align-items: center;
      background-color: rgba(255, 255, 255, 1);
      border-radius: 40px;
      font-size: 28px;
      box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1), 0 10px 20px rgba(0, 0, 0, 0.06);
      position: absolute;
      top:100px;
    `
    const box = {
      start: (back: boolean) => ({
        x: back ? -500 : 500,
        opacity: 0,
        scale: 0,
        transition: { duration: 0.5 }
    }),
      end: {
        x: 0,
        opacity: 1,
        scale: 1,
        transition: {
          duration: 0.5,
        }
      },
      exit: (back: boolean) => ({
        x: back ? 500 : -500,
        opacity: 0,
        scale: 0,
        transition: { duration: 0.5 }
      }),
    }
    
    function ...
    const [visible, setVisible] = useState(1);
      const [back, setBack] = useState(false);
      const nextPlease = () => {
        setBack(false);
        setVisible((prev) => (prev === 10 ? 1 : prev + 1))
      }
      const prevPlease = () => {
        setBack(true);
        setVisible((prev) => (prev === 1 ? 10 : prev - 1))
      }
    
    return
    		... 
    			<AnimatePresence custom={back} mode="wait">
            <Box key={visible}  custom={back} variants={box} initial="start" animate="end" exit="exit">{visible}</Box>
          </AnimatePresence>
          <button onClick={prevPlease}>prev</button>
          <button onClick={nextPlease}>next</button>

#7.14

μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•˜μ§€ μ•Šμ•„λ„ μ•Œμ•„μ„œ μ μš©ν•¨

layout

λ³€ν™” λ°œμƒν•˜λ©΄ μžλ™ animation 적용

Animate between components

λ™μΌν•œ layoutId prop을 κ°€μ§„ λͺ¨μ…˜ μ»΄ν¬λ„ŒνŠΈ κ°„ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•œλ‹€.

  • μ½”λ“œ

    const Circle = styled(motion.div)`
      background-color: #00a5ff;
      height: 100px;
      width: 100px;
      border-radius: 50px;
      box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1), 0 10px 20px rgba(0, 0, 0, 0.06);
    `
    
    function ...
    	const [clicked, setClicked] = useState(false)
      const toggleClicked = () => setClicked((prev) => !prev)
    
    return ...
    		<Wrapper onClick={toggleClicked} style={{ background: gradient }}>
          <Box>
            {!clicked ? <Circle layoutId="circle" /> : null}
          </Box>
          <Box>
            {clicked ? <Circle layoutId="circle" /> : null}
          </Box>
        </Wrapper>

#7.15

#7.16

πŸ“Ί
Examples | Framer for Developers
https://www.framer.com/motion
https://github.com/framer/motion
https://github.com/gsoft-inc/craco
https://github.com/gsoft-inc/craco/blob/master/packages/craco/README.md#installation
https://www.framer.com/docs/examples/#line-drawing
https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path
https://www.framer.com/docs/examples/#line-drawing
Motion