当前位置:首页 > 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 属性:

js 实现 marquee

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

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

js 实现 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

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

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实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现图片轮播

js实现图片轮播

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

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…