当前位置:首页 > JavaScript

js 实现 marquee

2026-03-14 01:01:21JavaScript

在 JavaScript 中实现 Marquee(滚动字幕)效果可以通过多种方式完成,以下是一些常见的方法:

使用 CSS 和 JavaScript 结合

通过 CSS 动画和 JavaScript 控制可以实现平滑的滚动效果:

const marquee = document.querySelector('.marquee');
const content = marquee.innerHTML;
marquee.innerHTML = content + content; // 复制内容以实现无缝滚动

marquee.style.animation = 'scroll 10s linear infinite';

// CSS 部分(需添加到样式表中)
/*
.marquee {
  white-space: nowrap;
  overflow: hidden;
  display: inline-block;
}

@keyframes scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}
*/

纯 JavaScript 实现

通过定时器动态修改元素的 scrollLefttransform 属性:

const marquee = document.getElementById('marquee');
let position = 0;

function scrollMarquee() {
  position--;
  marquee.style.transform = `translateX(${position}px)`;

  if (position <= -marquee.scrollWidth / 2) {
    position = 0;
  }
  requestAnimationFrame(scrollMarquee);
}

scrollMarquee();

使用 HTML Marquee 标签(不推荐)

虽然 HTML 原生支持 <marquee> 标签,但已过时且不推荐使用:

<marquee behavior="scroll" direction="left">滚动的内容</marquee>

响应式 Marquee

针对不同屏幕尺寸调整滚动速度:

const marquee = document.querySelector('.marquee');
let speed = 1;

function adjustSpeed() {
  speed = window.innerWidth < 768 ? 0.5 : 1;
}

window.addEventListener('resize', adjustSpeed);
adjustSpeed();

function animate() {
  marquee.style.transform = `translateX(${-speed * (Date.now() / 100)}px)`;
  requestAnimationFrame(animate);
}

animate();

带暂停功能的 Marquee

添加鼠标悬停暂停功能:

const marquee = document.querySelector('.marquee');
let isPaused = false;
let position = 0;

marquee.addEventListener('mouseenter', () => isPaused = true);
marquee.addEventListener('mouseleave', () => isPaused = false);

function scroll() {
  if (!isPaused) {
    position -= 1;
    marquee.style.transform = `translateX(${position}px)`;

    if (position <= -marquee.scrollWidth / 2) {
      position = 0;
    }
  }
  requestAnimationFrame(scroll);
}

scroll();

垂直滚动的 Marquee

修改方向即可实现垂直滚动:

js 实现 marquee

const marquee = document.querySelector('.marquee');
let position = 0;

function scrollVertical() {
  position--;
  marquee.style.transform = `translateY(${position}px)`;

  if (position <= -marquee.scrollHeight) {
    position = 0;
  }
  requestAnimationFrame(scrollVertical);
}

scrollVertical();

以上方法可以根据具体需求选择使用,CSS 动画方案性能较好,而纯 JavaScript 方案则提供更多控制灵活性。

标签: jsmarquee
分享给朋友:

相关文章

js实现轮播

js实现轮播

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

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…