You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Framer Motion whileHover动画无法重复播放问题求助

解决Framer Motion hover动画无法重复循环的问题

问题原因:whileHover的默认触发逻辑是在鼠标悬停开始时执行一次keyframes动画序列,即使设置了repeat: Infinity,动画完成后也不会自动重复——因为Framer Motion认为whileHover的状态已经达成,不会再次触发动画循环。

解决方案1:使用useHover钩子配合animate属性控制循环

通过手动监听hover状态,在悬停时开启无限重复动画,离开时停止并恢复初始状态:

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

function HoverAnimatedElement() {
  const { hovered } = useHover();

  return (
    <motion.div
      animate={hovered ? { y: [0, -4, 0] } : { y: 0 }}
      transition={{
        duration: 0.3,
        repeat: hovered ? Infinity : 0,
        repeatType: "loop",
        ease: "easeInOut"
      }}
      style={{ /* 你的样式 */ }}
    >
      ...
    </motion.div>
  );
}

解决方案2:调整whileHover的动画逻辑(简化版)

如果不想使用钩子,可以在whileHover的transition中明确设置循环参数,不过这种方式在部分场景下可能存在触发延迟:

<motion.div
  whileHover={{
    y: [0, -4, 0],
    transition: {
      duration: 0.3,
      repeat: Infinity,
      repeatType: "loop",
      repeatDelay: 0,
      ease: "easeInOut"
    }
  }}
>
  ...
</motion.div>

注意:第二种方案的稳定性不如第一种,推荐使用基于useHover的方案,逻辑更可控。

内容的提问来源于stack exchange,提问作者JusticeMatthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:52:45