scrollamount 在现代浏览器中完全无效,因 已被 html5 废弃;css animation-duration 是唯一可靠方案,通过控制整轮动画耗时实现精确速度调控。

scrollamount 不能可靠控制滚动文字速度——它只在 IE11 或极旧内网系统里起作用,现代 Chrome/Firefox/Safari 完全忽略该属性,写了也白写。
为什么改 scrollamount 没反应
浏览器不是“不支持”,而是**主动无视**:scrollamount 是 <marquee></marquee> 标签的专有属性,而 <marquee></marquee> 在 HTML5 中已被 W3C 标记为 obsolete(废弃)。主流浏览器从 2015 年起陆续移除对其动画逻辑的支持,仅保留标签解析能力(防止页面崩)。所以即使你写 <marquee scrollamount="1">文字</marquee>,实际渲染时根本不会读取这个值。
更隐蔽的问题是:IE 中的 scrollamount 表现也不稳定。同一数值在高 DPI 屏、禁用 GPU 加速、或不同字体渲染设置下,视觉速度差异可达 ±40%,无法跨设备复现。
CSS animation-duration 是唯一可预测的方案
真正可控的速度,取决于动画完成一整轮所需时间,而不是“每帧跳多少像素”。用 @keyframes + animation-duration 才能获得确定性结果:
.scroll-text span {
animation: scroll-left 6s linear infinite;
}
@keyframes scroll-left {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
-
animation-duration: 6s→ 整轮滚动耗时 6 秒;设为3s就快一倍,12s就慢一半 - 必须给父容器设
overflow: hidden和明确宽度,否则位移超出部分仍可见 - 不要用
%值做transform起止点以外的插值,否则 Safari 可能跳帧
需要动态变速?直接改 style.animationDuration
用户悬停暂停、点击加速等交互场景下,CSS 方案不够灵活,此时 JS 直接操作 DOM 属性最稳:
const el = document.querySelector('.scroll-text span');
el.style.animationDuration = '2.5s'; // 立即生效,无需重写整个 animation 字符串
el.addEventListener('mouseenter', () => {
el.style.animationDuration = '0s'; // 暂停:设为 0s 即冻结在当前帧
});
el.addEventListener('mouseleave', () => {
el.style.animationDuration = '8s'; // 恢复
});
- 避免修改
style.animation字符串(如el.style.animation = 'scroll-left 4s ...'),容易因顺序/语法错误导致动画中断 - 移动端务必加
will-change: transform,否则快速切换animationDuration时易卡顿 - 如果手写
requestAnimationFrame滚动逻辑,必须用performance.now()计算 delta 时间,setTimeout会因事件队列堆积导致严重漂移
真正麻烦的不是“怎么调快慢”,而是“怎么让快慢在所有设备上看起来一致”——CSS 动画时间轴是浏览器统一调度的,scrollamount 却依赖每个浏览器私有定时器实现,这点差异决定了它早已不该出现在新项目里。










