当前位置:首页 > JavaScript

js 实现 marquee

2026-02-01 02:48:20JavaScript

实现 Marquee 效果

使用 JavaScript 实现 Marquee(跑马灯)效果可以通过多种方式完成,以下是几种常见的方法:

使用 CSS 动画结合 JavaScript

通过 CSS 的 @keyframesanimation 属性实现滚动效果,JavaScript 用于动态控制内容。

<div id="marquee" style="overflow: hidden; white-space: nowrap;">
  <span id="marquee-content">这里是需要滚动的内容,可以很长很长...</span>
</div>
const marqueeContent = document.getElementById('marquee-content');
const marquee = document.getElementById('marquee');

// 克隆内容以实现无缝滚动
marqueeContent.innerHTML += marqueeContent.innerHTML;

// 获取内容宽度
const contentWidth = marqueeContent.scrollWidth / 2;

// 设置动画
marqueeContent.style.animation = `scroll ${contentWidth / 50}s linear infinite`;

// 定义 CSS 动画
const style = document.createElement('style');
style.innerHTML = `
  @keyframes scroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(-${contentWidth}px); }
  }
`;
document.head.appendChild(style);

使用 JavaScript 定时器

通过 setInterval 动态修改元素的 scrollLefttransform 属性实现滚动。

<div id="marquee" style="overflow: hidden; white-space: nowrap;">
  <span id="marquee-content">这里是需要滚动的内容,可以很长很长...</span>
</div>
const marqueeContent = document.getElementById('marquee-content');
const marquee = document.getElementById('marquee');

// 克隆内容
marqueeContent.innerHTML += marqueeContent.innerHTML;

let position = 0;
const speed = 2; // 滚动速度

function scrollMarquee() {
  position -= speed;
  if (position <= -marqueeContent.scrollWidth / 2) {
    position = 0;
  }
  marqueeContent.style.transform = `translateX(${position}px)`;
  requestAnimationFrame(scrollMarquee);
}

scrollMarquee();

使用 HTML <marquee> 标签(不推荐)

虽然 HTML 原生支持 <marquee> 标签,但已过时,不建议在现代项目中使用。仅作参考:

js 实现 marquee

<marquee behavior="scroll" direction="left">
  这里是需要滚动的内容,可以很长很长...
</marquee>

注意事项

  1. 性能优化:使用 requestAnimationFrame 替代 setInterval 可以获得更流畅的动画效果。
  2. 响应式设计:动态计算内容宽度以适应不同屏幕尺寸。
  3. 无缝滚动:通过克隆内容并重置位置实现无缝循环。
  4. 暂停交互:可以通过 JavaScript 监听鼠标事件实现悬停暂停功能。
marquee.addEventListener('mouseenter', () => {
  marqueeContent.style.animationPlayState = 'paused';
});

marquee.addEventListener('mouseleave', () => {
  marqueeContent.style.animationPlayState = 'running';
});

标签: jsmarquee
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…