如何让animate/whileInView先等待2秒再执行并保留动画延迟?
解决Framer Motion whileInView动画先等待2秒再执行的问题
问题原因
你之前添加全局transition没生效,是因为Framer Motion中**whileInView内部的transition配置会覆盖全局的transition设置**,所以全局的delay:2被局部的delay:1覆盖了,达不到预期的等待效果。
正确实现方法
要实现“进入视口后先等待2秒,再保留原有动画延迟”的效果,只需要把两个延迟时间合并,在whileInView的transition里设置总延迟为2+1=3秒即可:
var inats = { initial: { opacity: 0 }, whileInView: { opacity: 1, transition: { delay: 3 } // 2秒等待期 + 原有1秒动画延迟 }, // 可选:配置视口触发规则,比如只触发一次 viewport: { once: true } }
更精细的控制(可选)
如果需要拆分等待逻辑(比如等待2秒后,再执行带自定义时长/缓动的动画),可以使用keyframes来实现分步动画:
var inats = { initial: { opacity: 0 }, whileInView: { opacity: [0, 0, 1], transition: { keyframes: { opacity: [0, 0, 1] }, duration: 0.5, // 动画本身的时长 delay: 2, // 先等待2秒 times: [0, 0.8, 1] // 前80%时间保持opacity:0(对应等待),最后20%完成动画 } }, viewport: { once: true } }
内容的提问来源于stack exchange,提问作者ok i
相关产品推荐
相关产品推荐

