当前位置:首页 > 修改聊天记录 > 正文内容

前端动画库

网页编辑6个月前 (04-27)修改聊天记录248

// 正确的做法:使用Framer Motion

import React from 'react';

import { motion } from 'framer-motion';


function FramerMotionExample() {

  return (

    <div>

      <h2>Framer Motion 示例</h2>

      

      {/* 基础动画 */}

      <motion.div

        initial={{ opacity: 0, y: 20 }}

        animate={{ opacity: 1, y: 0 }}

        transition={{ duration: 0.5 }}

        className="box"

      >

        淡入动画

      </motion.div>

      

      {/* 循环动画 */}

      <motion.div

        animate={{ rotate: 360 }}

        transition={{ duration: 2, repeat: Infinity, ease: "linear" }}

        className="circle"

      >

        旋转动画

      </motion.div>

      

      {/* 交互动画 */}

      <motion.button

        whileHover={{ scale: 1.05 }}

        whileTap={{ scale: 0.95 }}

        className="button"

      >

        悬停按钮

      </motion.button>

      

      {/* 序列动画 */}

      <motion.div className="container">

        {[1, 2, 3, 4, 5].map((item) => (

          <motion.div

            key={item}

            initial={{ opacity: 0, y: 20 }}

            animate={{ opacity: 1, y: 0 }}

            transition={{

              delay: item * 0.1,

              duration: 0.5

            }}

            className="item"

          >

            项目 {item}

          </motion.div>

        ))}

      </motion.div>

    </div>

  );

}


// 正确的做法:使用GSAP

import React, { useEffect, useRef } from 'react';

import gsap from 'gsap';


function GSAPExample() {

  const containerRef = useRef(null);

  const boxRef = useRef(null);

  

  useEffect(() => {

    // 基础动画

    gsap.to(boxRef.current, {

      x: 100,

      y: 50,

      rotate: 45,

      duration: 1,

      ease: "power2.out"

    });

    

    // 时间线动画

    const tl = gsap.timeline({

      repeat: -1,

      yoyo: true

    });

    

    tl.to(".item", {

      x: 100,

      duration: 0.5,

      stagger: 0.1

    })

    .to(".item", {

      y: 50,

      duration: 0.5

    })

    .to(".item", {

      opacity: 0.5,

      duration: 0.5

    });

    

  }, []);

  

  return (

    <div ref={containerRef}>

      <h2>GSAP 示例</h2>

      <div ref={boxRef} className="box">

        GSAP 动画

      </div>

      <div className="container">

        {[1, 2, 3, 4, 5].map((item) => (

          <div key={item} className="item">

            项目 {item}

          </div>

        ))}

      </div>

    </div>

  );

}


// 正确的做法:使用React Spring

import React from 'react';

import { useSpring, animated } from 'react-spring';


function ReactSpringExample() {

  // 基础动画

  const fadeIn = useSpring({

    from: { opacity: 0, transform: 'translateY(20px)' },

    to: { opacity: 1, transform: 'translateY(0)' },

    config: { tension: 100, friction: 10 }

  });

  

  // 交互动画

  const [isHovered, setIsHovered] = React.useState(false);

  const buttonAnimation = useSpring({

    scale: isHovered ? 1.1 : 1,

    config: { tension: 300, friction: 10 }

  });

  

  return (

    <div>

      <h2>React Spring 示例</h2>

      

      <animated.div

        style={fadeIn}

        className="box"

      >

        淡入动画

      </animated.div>

      

      <animated.button

        style={buttonAnimation}

        onMouseEnter={() => setIsHovered(true)}

        onMouseLeave={() => setIsHovered(false)}

        className="button"

      >

        悬停按钮

      </animated.button>

      

      {/* 循环动画 */}

      <animated.div

        style={useSpring({

          rotate: 360,

          from: { rotate: 0 },

          config: { duration: 2000 },

          loop: true

        })}

        className="circle"

      >

        旋转动画

      </animated.div>

    </div>

  );

}


// 正确的做法:选择合适的动画库

function AnimationLibraryComparison() {

  return (

    <div>

      <h1>前端动画库比较</h1>

      

      <div className="comparison">

        <div className="library">

          <h3>CSS Animations</h3>

          <p>优点:简单、性能好、无需依赖</p>

          <p>缺点:复杂动画难以实现、交互性差</p>

          <p>适用场景:简单的过渡效果、加载动画</p>

        </div>

        

        <div className="library">

          <h3>Framer Motion</h3>

          <p>优点:API友好、交互性强、React集成好</p>

          <p>缺点:包体积较大</p>

          <p>适用场景:React应用、复杂交互动画</p>

        </div>

        

        <div className="library">

          <h3>GSAP</h3>

          <p>优点:功能强大、性能优异、支持复杂动画</p>

          <p>缺点:学习曲线较陡</p>

          <p>适用场景:复杂动画、时间线动画、SVG动画</p>

        </div>

        

        <div className="library">

          <h3>React Spring</h3>

          <p>优点:基于物理的动画、性能好、API简洁</p>

          <p>缺点:功能相对较少</p>

          <p>适用场景:流畅的物理动画、交互反馈</p>

        </div>

      </div>

    </div>

  );

}

每种动画库都有其优缺点,你需要根据项目需求和复杂度选择合适的工具。Framer Motion适合React应用,GSAP适合复杂动画,React Spring适合物理动画,CSS适合简单过渡。


所以,别再固守一种动画方式了,灵活选择合适的工具,让你的网站动起来!


总结

CSS Animations:适合简单的过渡效果和加载动画

Framer Motion:适合React应用和复杂交互动画

GSAP:适合复杂动画、时间线动画和SVG动画

React Spring:适合基于物理的流畅动画

性能优化:使用transform和opacity属性,避免重排

动画策略:合理使用动画,避免过度动画

可访问性:考虑动画对用户的影响,提供减少动画的选项

响应式:确保动画在不同设备上都能正常工作

————————————————

版权声明:本文为CSDN博主「大山哥AGI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/cannonmonster01/article/details/159729432


扫描二维码推送至手机访问。

版权声明:本文由手机数据加工厂发布,如需转载请注明出处。

本文链接:https://www.gaijilu.com/?id=175

“前端动画库” 的相关文章

普通版袁大头真假鉴别/手把手教你银元鉴定

普通版袁大头真假鉴别/手把手教你银元鉴定

  一块普通版袁大头行情在800-1500左右,今天我们来看看它的真假鉴别一、银质辨伪:辩别银元的真假,首先从辨识银质的真假开始,银元连银都不是怎么能称为银元呢,从古有“银子发白眼睛发黑”之说,就是说真币越擦越白,晶莹锃亮,表里一致,反之一擦就发黑或灰白,如镀银所制,则有一种浮躁感。二、...

微信如何选择时间从手机往电脑迁移

微信如何选择时间从手机往电脑迁移

有的时候需要将记录从手机往电脑,或者电脑往手机迁移,碰到有的人数据量非大,会耗费大量时间,这个时候就可以选择性的迁移,精确到日期,这样数据量就小很多,现在就引导手机往电脑迁移。以安卓机为例第一步:在微信主页右下角-我第2步:设置第3步:聊天第4步:聊天记录迁移与备份第5步:迁移第6步:迁移到电脑微信...

手机用久了变卡顿,教你6步操作,手机立马流畅如新

手机用久了变卡顿,教你6步操作,手机立马流畅如新

手机卡顿,就如同一条,搁浅的电子“咸鱼”每一次滑动时,都伴随着,沉重的喘息。屏幕反应,慢上半拍,游戏帧率,犹如疯狂地跳水,就连扫码付款,也变成了一种,耐心的考验。但切莫着急换新机!今日这6步操作,便可让你的手机,由“老黄牛”变回“小猎豹”,流畅如初!一、深度清理:揪出空间"隐形杀手&quo...

有哪些软件可以实现手机和电脑之间的高效数据管理?

有哪些软件可以实现手机和电脑之间的高效数据管理?

下面按「苹果生态 / 安卓+Windows / 全平台通用」三类,给你整理**真正能落地、高效不乱的手机↔电脑数据管理软件**,每款讲清楚:**能干啥、适合谁、优缺点**。 --- ## 一、iPhone + Mac(苹果生态最优) ### 1. 系统自带:隔空投送 + 访达(免费,首...

 如何使用iMazing进行照片备份?

如何使用iMazing进行照片备份?

一、准备工作电脑安装 iMazing(支持 Mac / Windows)用原装数据线把 iPhone 连到电脑手机解锁,信任此电脑二、方法 A:单独导出照片(最常用)1. 进入照片界面iMazing 识别手机后,左侧点击照片iMazing2. 选择要备份的照片按 Ctrl+A 全选,或手动勾选可按相...

云空间不够用?解决办法

一、清理无用数据(最快见效)删除重复照片、模糊截图、过期视频、无用录屏,这类文件占用空间最大。清理软件缓存、垃圾文件、过期安装包、压缩包。删掉不再需要的聊天记录、旧文件、离线缓存内容。二、本地备份,释放云端空间用电脑有线连接手机,把照片、视频、大文件批量保存到电脑硬盘。重要资料存电脑本地,不用全部上...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。