返回顶部
首页 > 资讯 > 精选 >怎么使用Framer Motion实现React动画
  • 775
分享到

怎么使用Framer Motion实现React动画

2023-07-04 12:07:31 775人浏览 独家记忆
摘要

这篇文章主要介绍“怎么使用Framer Motion实现React动画”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Framer Motion实现React动画”文章能帮

这篇文章主要介绍“怎么使用Framer Motion实现React动画”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Framer Motion实现React动画”文章能帮助大家解决问题。

在我们的常规认知中,实现这样的效果其实需要很多的css来实现,或者说需要我们进行大量的定制化逻辑编写。但是如果我们使用framer motion的话,只需要如下代码:

import { AnimatePresence, motion } from 'framer-motion';const [selectedId, setSelectedId] = useState(null);{items.map(item => (  <motion.div layoutId={item.id} onClick={() => setSelectedId(item.id)}>    <motion.h6>{item.subtitle}</motion.h6>    <motion.h3>{item.title}</motion.h3>  </motion.div>))}<AnimatePresence>  {selectedId && (    <motion.div layoutId={selectedId}>      <motion.h6>{item.subtitle}</motion.h6>      <motion.h3>{item.title}</motion.h3>      <motion.button onClick={() => setSelectedId(null)} />    </motion.div>  )}</AnimatePresence>

从上面的实现我们可以看出,framer-motion可以说是我们在用react动效开发过程中的必备利器。那么接下来,我给大家简单介绍一些framer motion的基础用法。

快速开始

Framer Motion 需要 React 18 或更高版本。

安装

从npm安装framer-motion

npm install framer-motion

输入

安装后,您可以通过framer-motion引入Framer Motion

import { motion } from "framer-motion"export const MyComponent = ({ isVisible }) => (    <motion.div animate={{ opacity: isVisible ? 1 : 0 }} />)

使用方式

Framer motion的核心apimotion的组件。每个htmlSVG标签都有对应的motion组件。

他们渲染的结果与对应的原生组件完全一致,并在其之上增加了一些动画和手势相关的props

比如:

<motion.div /><motion.span /><motion.h2 /><motion.svg />...

示例

比如我们现在想要实现一个侧边栏效果。

节点的挂载与卸载(mount、unmount)

如果我们自己来实现的话,可能要考虑它的keyframe,它的初始状态与最终的CSS样式。那么如果用framer-motion来如何实现呢?

首先我们来设计一个会动的按钮Icon:

import * as React from "react";import { motion } from "framer-motion";const Path = props => (  <motion.path    fill="transparent"    strokeWidth="3"    stroke="hsl(0, 0%, 18%)"    strokeLinecap="round"    {...props}  />);const MenuToggle = ({ toggle }) => (  <button onClick={toggle}>    <svg width="23" height="23" viewBox="0 0 23 23">      <Path        variants={{        closed: { d: "M 2 2.5 L 20 2.5" },        open: { d: "M 3 16.5 L 17 2.5" }        }}      />      <Path        d="M 2 9.423 L 20 9.423"        variants={{        closed: { opacity: 1 },        open: { opacity: 0 }        }}        transition={{ duration: 0.1 }}      />      <Path        variants={{        closed: { d: "M 2 16.346 L 20 16.346" },        open: { d: "M 3 2.5 L 17 16.346" }        }}      />    </svg>  </button>);

接下来,就由这个按钮来控制侧边栏的展示(mount)与隐藏(unmount):

import * as React from "react";import { useRef } from "react";import { motion, useCycle } from "framer-motion";import { useDimensions } from "./use-dimensions";const sidebar = {  open: (height = 1000) => ({    clipPath: `circle(${height * 2 + 200}px at 40px 40px)`,    transition: {      type: "spring",      stiffness: 20,      restDelta: 2    }  }),  closed: {    clipPath: "circle(30px at 40px 40px)",    transition: {      delay: 0.5,      type: "spring",      stiffness: 400,      damping: 40    }  }};export const Example = () => {  const [isOpen, toggleOpen] = useCycle(false, true);  const containerRef = useRef(null);  const { height } = useDimensions(containerRef);  return (    <motion.nav      initial={false}      animate={isOpen ? "open" : "closed"}      custom={height}      ref={containerRef}    >      <motion.div className="background" variants={sidebar} />      <MenuToggle toggle={() => toggleOpen()} />    </motion.nav>  );};

也就是说,其实我们更多需要做的事情,从思考如何设计各元素之间的css联动与keyframe书写变成了如何按照文档写好framer-motion的配置。哪个更轻松相信大家一目了然。

列表

首先我们先来进行单个Item的封装:

import * as React from "react";import { motion } from "framer-motion";const variants = {  open: {    y: 0,    opacity: 1,    transition: {      y: { stiffness: 1000, velocity: -100 }    }  },  closed: {    y: 50,    opacity: 0,    transition: {      y: { stiffness: 1000 }    }  }};const colors = ["#FF008C", "#D309E1", "#9C1AFF", "#7700FF", "#4400FF"];export const MenuItem = ({ i }) => {  const style = { border: `2px solid ${colors[i]}` };  return (    <motion.li      variants={variants}      whileHover={{ scale: 1.1 }}      whileTap={{ scale: 0.95 }}    >      <div className="icon-placeholder" style={style} />      <div className="text-placeholder" style={style} />    </motion.li>  );};

然后我们在已封装Item的基础上,再进行整个菜单的封装:

import * as React from "react";import { motion } from "framer-motion";const itemIds = [0, 1, 2, 3, 4];const variants = {  open: {    transition: { staggerChildren: 0.07, delayChildren: 0.2 }  },  closed: {    transition: { staggerChildren: 0.05, staggerDirection: -1 }  }};export const Navigation = () => (  <motion.ul variants={variants}>    {itemIds.map(i => (      <MenuItem i={i} key={i} />    ))}  </motion.ul>);

关于“怎么使用Framer Motion实现React动画”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: 怎么使用Framer Motion实现React动画

本文链接: https://lsjlt.com/news/344879.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Framer Motion实现React动画
    这篇文章主要介绍“怎么使用Framer Motion实现React动画”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Framer Motion实现React动画”文章能帮...
    99+
    2023-07-04
  • 怎么使用react native reanimated实现动画
    这篇“怎么使用react native reanimated实现动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2023-07-05
  • React中怎么实现常见的动画
    这篇文章主要介绍React中怎么实现常见的动画,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!现在,用户对于前端页面的要求已经不能满足于实现功能,更要有颜值,有趣味。除了整体 UI 的...
    99+
    2024-04-02
  • 使用jQuery怎么实现动画
    小编今天带大家了解使用jQuery怎么实现动画,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“使用j...
    99+
    2024-04-02
  • 怎么使用vue实现动画效果
    这篇文章主要介绍了怎么使用vue实现动画效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用vue实现动画效果文章都会有所收获,下面我们一起来看看吧。Vue封装的过度与动画1.作用在插入,更新,移除DOM...
    99+
    2023-07-05
  • Vue3之怎么使用js实现动画
    这篇“Vue3之怎么使用js实现动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue3之怎么使用js实现动画”文章吧。概...
    99+
    2023-07-05
  • 怎么使用js实现动画效果
    这篇文章主要介绍“怎么使用js实现动画效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用js实现动画效果”文章能帮助大家解决问题。1.动画原理      &nb...
    99+
    2023-07-05
  • 怎么用React加CSS3实现微信拆红包动画效果
    小编给大家分享一下怎么用React加CSS3实现微信拆红包动画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用CSS3绘制红...
    99+
    2024-04-02
  • JS怎么使用window.requestAnimationFrame()实现逐帧动画
    这篇文章主要讲解了“JS怎么使用window.requestAnimationFrame()实现逐帧动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS怎么使用window.request...
    99+
    2023-07-02
  • react native reanimated实现动画示例详解
    目录背景动画拆分实现抖动定义动画实现缩放动画改变内容Reanimated 原理浅析总结背景 在一次 App 迭代中,UI 想要给按钮添加一个动画效果,在对接的过程中,UI 表示直接...
    99+
    2023-03-06
    react native reanimated 动画 react native reanimated
  • react怎么实现滑动
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react怎么实现滑动?react 实现左右滑动效果React 中滑动手势的实现最近做了一点关于react在移动端滑动翻页的功能。开始搜索了一下,发现居然...
    99+
    2023-05-14
    滑动 React
  • vue怎么使用动画实现滚动表格效果
    这篇文章主要介绍“vue怎么使用动画实现滚动表格效果”,在日常操作中,相信很多人在vue怎么使用动画实现滚动表格效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么使用动画实现滚动表格效果”的疑惑有所...
    99+
    2023-06-29
  • css怎么实现动画
    这篇文章主要讲解了“css怎么实现动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css怎么实现动画”吧!随着业务对前端的需求越来越多,作为前端三大法宝之...
    99+
    2024-04-02
  • CSS3动画怎么实现
    本篇内容主要讲解“CSS3动画怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS3动画怎么实现”吧!     CSS3动画是什么...
    99+
    2024-04-02
  • css3怎么实现动画
    本篇内容主要讲解“css3怎么实现动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css3怎么实现动画”吧!具体使用示例:1.通过transition设置过渡...
    99+
    2022-12-15
    css3
  • 怎么使用react实现todolist
    这篇文章主要介绍了怎么使用react实现todolist的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用react实现todolist文章都会有所收获,下面我们一起来看看吧。使用react实现todoli...
    99+
    2023-07-04
  • Flutter中怎么使用AnimatedOpacity实现图片渐现动画
    今天小编给大家分享一下Flutter中怎么使用AnimatedOpacity实现图片渐现动画的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2023-06-29
  • 怎么用HTML实现简单动画
    这篇文章主要为大家展示了“怎么用HTML实现简单动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用HTML实现简单动画”这篇文章吧。 首先是创建一个ht...
    99+
    2024-04-02
  • react怎么实现滚动条
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react怎么实现滚动条?React-实现滚动条一、实现效果二、实现代码jsxrender() { const translateDistancePercenta...
    99+
    2023-05-14
    React
  • 使用CSS怎么实现变形、过渡与动画
    这期内容当中小编将会给大家带来有关使用CSS怎么实现变形、过渡与动画,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、过渡 transition  过渡属性用法: transition :ran...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作