3

我对两个动画库(react-spring、framer-motion)有疑问。我试图在组件第一次可见时制作简单的动画。(这是简化版)

<motion.div initial={{x: -25, opacity: 0}} animate={{x: 0, opacity: 1}} transition={{duration: 2.5}} className="App-logo">NAME</motion.div>

Github 项目

它在 Chrome、Brave、Edge 上看起来非常流畅,但在 Firefox 上它在动画结束时看起来很滞后。此示例基于 framer-motion,但在 react-spring 中看起来相同。当 transition-duration 更短而 translateX 更长时,它看起来更好,但仍然不是流畅的动画(并且更改适用于其他浏览器的属性不是解决此问题的方法)。火狐(76.0.1)(操作系统 Win10)。

我尝试使用清晰的 css 制作相同的动画,并且在每个浏览器上看起来都很流畅。我正在寻找解决问题的方法,但没有找到任何特定的答案。

4

1 回答 1

1

我认为这是 Firefox 和 Chrome 的渲染引擎的区别。Firefox 只是逐像素定位 div 而不进行亚像素渲染。如果您向 div 添加轻微的旋转,它会使 FF 引擎跳过优化。

<motion.div initial={{x: -25, opacity: 0, rotation: 0.02}} animate={{x: 0, opacity: 1, rotation: 0.02}} transition={{duration: 2.5}} className="App-logo">NAME</motion.div>

更新:根据您的 git 存储库,我添加了一个示例。如果我为前两行添加旋转,则 Firefox 中的动画明显比最后一行更平滑。

https://codesandbox.io/s/happy-cannon-tew1f

在此处输入图像描述

于 2020-06-02T09:10:19.307 回答