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

如何让keyframes动画平滑重启?解决结尾跳转卡顿及元素显示异常

嘿,我太懂你这个烦恼了——动画到结尾直接“弹”回起始状态,不仅突兀,第一个元素还显示不全,确实糟心。咱们来一步步把它改得丝滑起来:

问题根源拆解

首先,你的动画跳帧是因为关键帧里80%到100%是直接从-180px跳回0px,完全没有过渡过程;另外,每个<h3>的高度+边距计算不统一,导致位移数值出错,才会让第一个元素显示不全。

第一步:统一元素尺寸,搞定计算基准

先给每个<h3>固定高度和边距,确保位移计算精准(毕竟#flip的高度是43px,咱们让每个标题刚好填满这个容器):

#flip h3 {
  font-weight: 400;
  font-size: 0.5em;
  color: white;
  text-transform: uppercase;
  text-align: right;
  display: inline-block;
  padding: 5px;
  margin-bottom: 10px;
  height: 43px; /* 和#flip高度一致 */
  box-sizing: border-box; /* 让padding不额外占高度 */
  animation: flip 4s infinite;
  animation-delay: 1s;
}

第二步:重写关键帧,实现平滑循环

现在每个元素的总占用高度是43px(标题高度) + 10px(下边距)= 53px,咱们基于这个数值调整关键帧,同时给最后一段回滚动画留足过渡时间:

@-webkit-keyframes flip {
  0% { transform: translateY(0); }
  16.66% { transform: translateY(-53px); } /* 切到第二个元素 */
  33.32% { transform: translateY(-106px); } /* 第三个 */
  49.98% { transform: translateY(-159px); } /* 第四个 */
  66.64% { transform: translateY(-212px); } /* 第五个 */
  83.3% { transform: translateY(-212px); } /* 第五个元素停留一会儿 */
  100% { transform: translateY(0); } /* 平滑滑回第一个 */
}

这里把动画分成了三段:逐个切换元素→停留最后一个元素→平滑回滚到第一个,完美解决跳帧问题。

可选优化:让过渡更自然

如果想要动画的加速减速更柔和,可以给动画加上缓动函数:

#flip h3 {
  /* 其他样式不变 */
  animation: flip 4s infinite ease-in-out;
  animation-delay: 1s;
}

这样改完之后,动画就会丝滑地循环起来,第一个元素也能完整显示啦~

内容的提问来源于stack exchange,提问作者Matúš Rebroš

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:23:02