scrollamount在现代浏览器中完全无效,因标签已被HTML5废弃;应改用CSS animation-duration控制滚动速度,配合transform实现可靠动画。

scrollamount 在现代浏览器中完全不起作用——改它不会让文字变快或变慢,因为 <marquee></marquee> 已被 HTML5 废弃,Chrome、Firefox、Safari 从 2015 年起就不再执行它的动画逻辑。
为什么改 scrollamount 没反应
不是浏览器“还没支持”,而是主动跳过该属性解析:<marquee scrollamount="1">文字</marquee> 渲染时根本不会读取 scrollamount 值。即使在 IE11 中,同一数值在高 DPI 屏或禁用 GPU 加速时,视觉速度偏差可达 ±40%,无法复现。
-
scrollamount是<marquee></marquee>的专有属性,而该标签在 W3C HTML5 规范中标记为 obsolete - 主流浏览器仅保留对
<marquee></marquee>标签的语法解析能力(防止页面崩溃),不实现其动画行为 - 写
scrolldelay或behavior同样无效——整套机制已下线
CSS animation-duration 是唯一可靠方案
滚动快慢取决于动画完成一整轮所需时间,不是“每帧跳多少像素”。用 @keyframes + animation-duration 才能获得确定性结果:
.scroll-text span {
animation: scroll-left 8s linear infinite;
}
@keyframes scroll-left {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
-
animation-duration: 8s→ 整轮耗时 8 秒;改成4s就快一倍,16s就慢一半 - 父容器必须设
overflow: hidden和明确宽度,否则超出部分仍可见 - 避免在
@keyframes中用 % 做中间插值(如50% { transform: translateX(0); }),Safari 可能跳帧
需要动态变速?直接改 style.animationDuration
用户悬停暂停、点击加速等交互场景下,CSS 方案不够灵活,JS 直接操作 DOM 属性最稳:
const el = document.querySelector('.scroll-text span');
el.style.animationDuration = '2.5s'; // 立即生效
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时易卡顿 - 注意:设
0s是暂停的通用做法,但某些旧版 Safari 需配合animation-play-state: paused
真正麻烦的不是怎么写动画,而是很多人还在调试 scrollamount 却没意识到:浏览器早就把它当注释处理了。

















