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

CSS Keyframes文本持续滚动动画问题:解决动画结束时的突兀截断现象

解决CSS文本滚动动画突兀截断的问题

你的问题核心在于动画的起始与结束状态没有做到视觉无缝衔接——当前动画只让文本移动了自身宽度的50%,当动画循环回到初始位置时,文本会瞬间跳回,导致突兀的截断感。要实现持续流畅的滚动,关键是让动画的结束状态和起始状态看起来完全一致,这样循环时就不会有跳转。

这里给你一个简单有效的解决方案:

步骤1:复制文本内容,让滚动容器总宽度翻倍

我们需要让滚动内容在视觉上呈现“无限”感,所以可以复制一份相同的文本放在原文本右侧,这样当第一份文本滚出视野时,第二份文本刚好能接上。

步骤2:调整动画的滚动范围

把动画终点从translateX(-50%)改成translateX(-100%),这样滚动距离刚好是两份文本的总宽度,动画结束时第二份文本的位置和初始时第一份文本的位置完全一致,循环时就不会有突兀跳转。

修改后的完整代码示例:

HTML(以SVG场景为例,适配你的原text元素)

<svg width="400" height="100">
  <g class="scroll-container">
    <text x="0" y="50" font-size="20">这是需要滚动的目标文本内容</text>
    <text x="100%" y="50" font-size="20">这是需要滚动的目标文本内容</text>
  </g>
</svg>

CSS

.scroll-container {
  /* 确保文本始终在同一行,不换行 */
  white-space: nowrap;
}

.scroll-container text {
  opacity: 0.5;
  stroke: #bec1ce;
  /* 保留你原有的动画时长和线性速度 */
  animation: scrollText 5s infinite linear;
}

@keyframes scrollText {
  from {
    transform: translateX(0%);
  }
  to {
    transform: translateX(-100%);
  }
}

原理说明

当动画执行到translateX(-100%)时,第一份文本完全滚出左侧视野,而第二份文本刚好移动到原第一份文本的初始位置。此时动画循环回到translateX(0%),视觉上完全看不出变化,从而实现持续流畅的滚动效果。

如果你的文本是HTML的<span>或<div>,思路完全一致:用容器包裹两个相同文本元素,设置容器为display: flex或inline-block,再应用上述动画即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:57:29