Rumah hujung hadapan web tutorial js Animasi Reaksi Tanpa Usaha: Panduan untuk Gerak Penggubah

Animasi Reaksi Tanpa Usaha: Panduan untuk Gerak Penggubah

Jan 23, 2025 pm 10:39 PM

Effortless React Animation: A Guide to Framer Motion

TL;DR: Catatan blog ini menyediakan panduan komprehensif menggunakan Framer Motion, perpustakaan animasi React. Ia merangkumi konsep utama seperti komponen gerakan, varian dan peralihan serta menyediakan contoh praktikal untuk mencipta butang pudar, bar sisi slaid masuk, mod boleh seret dan animasi flip kad.

Keutamaan pertama kami sebagai pembangun bahagian hadapan ialah mencipta aplikasi web yang memastikan pengguna sentiasa terlibat. Ini boleh dilakukan dengan membuat halaman interaktif dan menyediakan pengalaman pengguna yang lebih baik.

Animasi menjadikan halaman anda interaktif; mereka membimbing pengguna dan menjadikan interaksi menarik. Pergerakan visual kecil pada halaman, seperti interaksi pengguna atau acara atau navigasi halaman, memberikan rasa kemeriahan, seperti kita berinteraksi dengan makhluk hidup yang bertindak balas terhadap tindakan kita.

Animasi, secara ringkasnya, ialah cara mengubah unsur secara visual dengan mengemas kini sifat atau dimensinya dari semasa ke semasa pada interaksi atau acara tertentu. Contohnya, penunjuk pemuatan yang menunjukkan bahawa tindakan anda sedang dijalankan.

Terdapat dua cara untuk menghidupkan elemen pada halaman web (dua cara untuk menukar sifat elemen).

  1. Melalui CSS, perpustakaan seperti Animate.css menyediakan satu set kelas animasi yang boleh ditambahkan pada elemen HTML.
  2. Melalui JavaScript, perpustakaan seperti Framer Motion memanipulasi sifat elemen DOM pada masa jalan melalui kod.

Dalam artikel ini, kami akan meneroka Framer Motion, salah satu perpustakaan paling popular untuk animasi. Ia memberikan kesederhanaan dan fleksibiliti serta direka bentuk untuk berfungsi dengan rangka kerja bahagian hadapan moden seperti React.

Kenapa Framer Motion?

Framer Motion ialah perpustakaan animasi sedia pengeluaran untuk React yang mencipta animasi mudah seperti peralihan dan interaksi berasaskan gerak isyarat yang kompleks melalui sintaks deklaratifnya. Ia menampilkan:

  • Kemudahan penggunaan: Framer Motion sangat mudah dan mudah digunakan, terima kasih kepada API dan kaedah intuitifnya.
  • Fleksibiliti: Ia boleh digunakan untuk mencipta animasi kompleks seperti pan, seret, cubit atau animasi mudah seperti pudar, peralihan.
  • Prestasi: Komponen gerakan dioptimumkan untuk prestasi, kerana ia dipaparkan di luar kitaran hayat React untuk berjalan lancar dan memastikan pengalaman pengguna yang lancar.
  • Komuniti dan Sokongan: Dokumen yang luas, set contoh yang besar dan penerimaan yang hebat oleh komuniti memudahkan untuk bermula.

Bermula dengan Framer Motion

Tambahkan perpustakaan Framer Motion pada projek anda menggunakan pengurus pakej npm atau benang.

npm install framer-motion
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Atau

npm install framer-motion
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Setelah kebergantungan dimuatkan, anda boleh memasukkan ini dalam projek anda untuk mencipta animasi interaktif.

yarn add framer-motion
Salin selepas log masuk
Salin selepas log masuk

Konsep asas

Komponen gerakan:

Framer Motion dilengkapi dengan senarai komponen gerakan untuk mencipta animasi 120fps. Ia menyediakan sokongan gerak isyarat yang mengandungi semua elemen HTML (seperti motion.div) dan elemen SVG biasa (seperti motion.square) yang merupakan komponen React khas yang boleh digunakan.

// On Client side
import { motion } from "motion/react"

// On Server-side 
import * as motion from "motion/react-client"

Salin selepas log masuk
Salin selepas log masuk

Prop & API:

Framer Motion menyediakan senarai API sebagai prop, seperti awal, animate dan keluar yang mentakrifkan tingkah laku animasi.

<motion.div className="card" />
Salin selepas log masuk
Salin selepas log masuk

Awal prop dinyalakan pada lekap komponen, animate dinyalakan apabila komponen dikemas kini dan prop keluar dinyalakan apabila komponen dinyahlekap. Rujuk panduan animasi Framer Motion yang lengkap untuk mendapatkan butiran lanjut.

Komponen gerakan adalah bebas daripada kitaran hayat Reacts atau kitaran render untuk prestasi yang lebih baik. Oleh itu, kita harus bergantung pada keadaan React untuk animasi, dan bukannya menggunakan nilai gerakan yang akan mengemas kini gaya tanpa mencetuskan pemaparan semula.

<motion.button
  initial={{opacity: 0}}
  animate={{opacity: 1}}
  transition={{duration: 1}}
  exit={{opacity: 0}}
>
  Click Me
</motion.button>

Salin selepas log masuk
Salin selepas log masuk

Varian termasuk:

  • listVariants: Mentakrifkan gelagat animasi untuk keseluruhan senarai, kami menghantar nilai varian pada prop yang akan mengakses sifat pada penembakannya. initial=”tersembunyi” dan animate=”kelihatan”. staggerChildren memastikan elemen kanak-kanak bernyawa dalam turutan.
  • itemVariants: Mentakrifkan gelagat animasi untuk item senarai.
  • Komponen motion.ul dan motion.li mewarisi varian untuk mencipta animasi yang diselaraskan.

Komponen tersuai: Mana-mana komponen React boleh ditukar kepada komponen gerakan dengan menghantarnya melalui fungsi motion.create().

import { motion, useMotionValue } from "framer-motion";

const MotionState = () => {
  const xPosition = useMotionValue(0);

  useEffect(() => {
    // It won’t trigger a re-render on the component
    const interval = setInterval(() => {
    xPosition.set(xPosition.get() + 100);
    }, 1000);

    return () => clearInterval(interval);
  }, []);

  return (
    <motion.div
   >



<p>In the previous example, the <strong>motion.div</strong> element will be translated by 100px on the x position (horizontally, translateX(100px)) at an interval of 1s.</p>

<p><strong>Variants:</strong> framer-motion provides support for the variants, which allows the reuse of animation configurations across multiple elements.<br>
</p>

<pre class="brush:php;toolbar:false">const AnimatedList = () => {
  const listVariants = {
    hidden: { opacity: 0, y: 20 },
    visible: {
       opacity: 1,
       y: 0,
       transition: {
           staggerChildren: 0.2,
      },
    },
  };

  const itemVariants = {
      visible: { opacity: 1 },
    hidden: { opacity: 0 },
  };

  return (
    <motion.ul initial="hidden" animate="visible" variants={listVariants}>
    {[1, 2, 3].map((item) => (
        <motion.li key={item} variants={itemVariants}>
        Item {item}
        </motion.li>
    ))}
    </motion.ul>
  );
};

Salin selepas log masuk
Salin selepas log masuk

Secara lalai, semua prop gerakan akan ditapis semasa menghantarnya ke komponen React. Animasi akan digunakan pada komponen, tetapi anda tidak boleh mengakses prop dalam React.

Untuk mengakses prop gerakan, hantar bendera forwardMotionProps: true sambil mencipta komponen gerakan.

const ReactComponent = (props) => {
  return <button {...props}>ClickMe>/button>;
};

const MotionComponent = motion.create(ReactComponent);

const FadingButton2 = () => {
  return (
    <MotionComponent
    initial={{ opacity: 0 }}
    animate={{ opacity: 1 }}
    exit={{ opacity: 0 }}
    transition={{ duration: 3 }}
    >
    Click Me
    </MotionComponent>
  );
};

Salin selepas log masuk
Salin selepas log masuk

Fungsi gerakan.create() juga menerima rentetan yang akan mencipta komponen gerakan elemen DOM tersuai.

const MotionComponent = motion.create(ReactComponent, {
  forwardMotionProps: true,
});

Salin selepas log masuk

Nota: Elakkan menggunakan gerakan.create() dalam kaedah kitaran hayat React seperti (useEffect), kerana ini akan cipta komponen baharu setiap kali kaedah kitaran hayat dimatikan.

Sekarang anda mempunyai idea yang baik tentang cara Framer Motion berfungsi dan APInya, mari lihat beberapa contoh cara anda boleh menggunakannya untuk animasi biasa.

Contoh

Butang pudar

npm install framer-motion
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
  • awal: Menetapkan keadaan awal butang kelegapan:0, apabila elemen itu bukan port pandangan.
  • menghidupkan: Menetapkan keadaan butang kepada kelegapan:1 apabila elemen berada dalam port pandangan.
  • peralihan: Mengkonfigurasi peralihan animasi; butang akan mengambil masa satu saat untuk beralih daripada kelegapan:0 kepada kelegapan:1
  • keluar: Menetapkan keadaan butang apabila elemen keluar dari port pandangan.

Properti keluar berkuat kuasa hanya apabila dibalut dengan komponen AnimatePresence.

yarn add framer-motion
Salin selepas log masuk
Salin selepas log masuk

AnimatePresence memberi kesan kepada kanak-kanak langsung, iaitu komponen gerakan yang sedang dialih keluar daripada pokok komponen React.

Ini boleh berlaku apabila komponen sedang mengemas kini pada perubahan kitaran hayat (lekapkan, kemas kini, nyahlekap)

// On Client side
import { motion } from "motion/react"

// On Server-side 
import * as motion from "motion/react-client"

Salin selepas log masuk
Salin selepas log masuk

Perubahan kuncinya

<motion.div className="card" />
Salin selepas log masuk
Salin selepas log masuk

Kanak-kanak ditambah atau dialih keluar daripada senarai.

<motion.button
  initial={{opacity: 0}}
  animate={{opacity: 1}}
  transition={{duration: 1}}
  exit={{opacity: 0}}
>
  Click Me
</motion.button>

Salin selepas log masuk
Salin selepas log masuk

Bar sisi slaid masuk

import { motion, useMotionValue } from "framer-motion";

const MotionState = () => {
  const xPosition = useMotionValue(0);

  useEffect(() => {
    // It won’t trigger a re-render on the component
    const interval = setInterval(() => {
    xPosition.set(xPosition.get() + 100);
    }, 1000);

    return () => clearInterval(interval);
  }, []);

  return (
    <motion.div
   >



<p>In the previous example, the <strong>motion.div</strong> element will be translated by 100px on the x position (horizontally, translateX(100px)) at an interval of 1s.</p>

<p><strong>Variants:</strong> framer-motion provides support for the variants, which allows the reuse of animation configurations across multiple elements.<br>
</p>

<pre class="brush:php;toolbar:false">const AnimatedList = () => {
  const listVariants = {
    hidden: { opacity: 0, y: 20 },
    visible: {
       opacity: 1,
       y: 0,
       transition: {
           staggerChildren: 0.2,
      },
    },
  };

  const itemVariants = {
      visible: { opacity: 1 },
    hidden: { opacity: 0 },
  };

  return (
    <motion.ul initial="hidden" animate="visible" variants={listVariants}>
    {[1, 2, 3].map((item) => (
        <motion.li key={item} variants={itemVariants}>
        Item {item}
        </motion.li>
    ))}
    </motion.ul>
  );
};

Salin selepas log masuk
Salin selepas log masuk

Peralihan props memainkan peranan penting dalam animasi. Mereka mengawal cara animasi berkembang dari semasa ke semasa. Framer Motion menyokong berbilang sifat untuk animasi yang lancar.

  • tempoh: Panjang animasi (dalam saat)
  • kelewatan: Melambatkan permulaan animasi (dalam beberapa saat)
  • kemudahan: Satu set fungsi pelonggaran yang menyokong cara animasi akan berkembang ('ease', 'easeIn', 'easeInOut')

Modal Boleh Seret

Gerakan pembingkai juga menyokong animasi interaktif dengan gerak isyarat seperti tuding, ketik dan seret.

const ReactComponent = (props) => {
  return <button {...props}>ClickMe>/button>;
};

const MotionComponent = motion.create(ReactComponent);

const FadingButton2 = () => {
  return (
    <MotionComponent
    initial={{ opacity: 0 }}
    animate={{ opacity: 1 }}
    exit={{ opacity: 0 }}
    transition={{ duration: 3 }}
    >
    Click Me
    </MotionComponent>
  );
};

Salin selepas log masuk
Salin selepas log masuk
  • Halaman: Membungkus komponen kanak-kanak dengan animasi gerakan.
  • Awal, menghidupkan, & keluar: Mengendalikan penampilan dan kehilangan komponen pada navigasi halaman.

Kesimpulan

Terima kasih kerana membaca! Framer Motion ialah perpustakaan animasi berkuasa yang memudahkan untuk menambah animasi yang menakjubkan pada komponen React. Ia membantu anda mencipta animasi ringkas untuk mengendalikan interaksi berasaskan gerak isyarat yang kompleks. Terdapat kemungkinan yang tidak berkesudahan dengan Framer Motion untuk menambah interaksi pada aplikasi React anda.

Versi baharu Essential Studio® tersedia untuk pelanggan sedia ada pada halaman Lesen dan Muat Turun. Jika anda baharu, daftar untuk percubaan percuma 30 hari kami untuk meneroka ciri kami.

Jangan ragu untuk menghubungi kami melalui forum sokongan, portal sokongan atau portal maklum balas kami. Kami sentiasa di sini untuk membantu anda!

Blog Berkaitan

  • 5 Penonton React PDF Teratas untuk Pengendalian Dokumen yang Lancar
  • 5 Perpustakaan Carta Reaksi Teratas untuk 2025
  • Vite.js: Bina Bahagian Hadapan Lebih Pantas
  • RxJS untuk React: Membuka Kunci Keadaan Reaktif

Atas ialah kandungan terperinci Animasi Reaksi Tanpa Usaha: Panduan untuk Gerak Penggubah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apa yang perlu saya lakukan jika saya menghadapi percetakan kod yang dihiasi untuk resit kertas terma depan? Apa yang perlu saya lakukan jika saya menghadapi percetakan kod yang dihiasi untuk resit kertas terma depan? Apr 04, 2025 pm 02:42 PM

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Demystifying JavaScript: Apa yang berlaku dan mengapa penting Demystifying JavaScript: Apa yang berlaku dan mengapa penting Apr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Siapa yang dibayar lebih banyak Python atau JavaScript? Siapa yang dibayar lebih banyak Python atau JavaScript? Apr 04, 2025 am 12:09 AM

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Bagaimana untuk mencapai kesan menatal paralaks dan kesan animasi elemen, seperti laman web rasmi Shiseido?
atau:
Bagaimanakah kita dapat mencapai kesan animasi yang disertai dengan menatal halaman seperti laman web rasmi Shiseido? Bagaimana untuk mencapai kesan menatal paralaks dan kesan animasi elemen, seperti laman web rasmi Shiseido? atau: Bagaimanakah kita dapat mencapai kesan animasi yang disertai dengan menatal halaman seperti laman web rasmi Shiseido? Apr 04, 2025 pm 05:36 PM

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Evolusi JavaScript: Trend Semasa dan Prospek Masa Depan Evolusi JavaScript: Trend Semasa dan Prospek Masa Depan Apr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Adakah JavaScript sukar belajar? Adakah JavaScript sukar belajar? Apr 03, 2025 am 12:20 AM

Pembelajaran JavaScript tidak sukar, tetapi ia mencabar. 1) Memahami konsep asas seperti pembolehubah, jenis data, fungsi, dan sebagainya. 2) Pengaturcaraan asynchronous tuan dan melaksanakannya melalui gelung acara. 3) Gunakan operasi DOM dan berjanji untuk mengendalikan permintaan tak segerak. 4) Elakkan kesilapan biasa dan gunakan teknik debugging. 5) Mengoptimumkan prestasi dan mengikuti amalan terbaik.

Bagaimana untuk menggabungkan elemen array dengan ID yang sama ke dalam satu objek menggunakan JavaScript? Bagaimana untuk menggabungkan elemen array dengan ID yang sama ke dalam satu objek menggunakan JavaScript? Apr 04, 2025 pm 05:09 PM

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Operasi Asynchronous Zustand: Bagaimana untuk memastikan keadaan terkini yang diperoleh oleh Usestore? Operasi Asynchronous Zustand: Bagaimana untuk memastikan keadaan terkini yang diperoleh oleh Usestore? Apr 04, 2025 pm 02:09 PM

Masalah kemas kini data dalam operasi Zustand Asynchronous. Apabila menggunakan Perpustakaan Pengurusan Negeri Zustand, anda sering menghadapi masalah kemas kini data yang menyebabkan operasi tak segerak menjadi tidak lama lagi. � ...

See all articles