js实现marquee
使用HTML原生marquee标签
HTML自带<marquee>标签可实现简单的滚动效果,但已过时(不推荐生产环境使用):

<marquee behavior="scroll" direction="left">滚动文本内容</marquee>
behavior: 可选scroll(循环滚动)、slide(滑动停止)、alternate(往返滚动)direction: 控制方向(left,right,up,down)
使用CSS动画实现
通过CSS @keyframes和transform实现更现代的滚动效果:

<div class="marquee">
<span>需要滚动的文本内容</span>
</div>
.marquee {
width: 100%;
overflow: hidden;
white-space: nowrap;
}
.marquee span {
display: inline-block;
animation: marquee 10s linear infinite;
}
@keyframes marquee {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
- 调整
animation-duration(如10s)控制速度 - 支持双向滚动:修改
transform值为translateY可实现垂直滚动
使用JavaScript动态控制
通过定时器动态修改元素位置实现灵活控制:
<div id="js-marquee" style="overflow: hidden;">
<span id="marquee-text">需要滚动的文本内容</span>
</div>
const marquee = document.getElementById('js-marquee');
const text = document.getElementById('marquee-text');
let position = marquee.offsetWidth;
function animate() {
position--;
if (position < -text.offsetWidth) {
position = marquee.offsetWidth;
}
text.style.transform = `translateX(${position}px)`;
requestAnimationFrame(animate);
}
animate();
- 使用
requestAnimationFrame优化性能 - 可通过
position增减实现不同方向滚动
第三方库(如jQuery)
使用jQuery简化实现:
$('.marquee').each(function() {
const $this = $(this);
$this.css('overflow', 'hidden');
const text = $this.find('span');
let position = $this.width();
setInterval(() => {
position--;
if (position < -text.width()) {
position = $this.width();
}
text.css('transform', `translateX(${position}px)`);
}, 20);
});
注意事项
- 性能优化:避免频繁DOM操作,使用
transform代替left/top - 响应式设计:监听容器宽度变化时重置
position - 无缝循环:克隆内容节点实现平滑衔接
根据需求选择方案,CSS动画适用于简单场景,JavaScript方案提供更高可控性。






