当前位置:首页 > JavaScript

js实现marquee

2026-03-13 20:44:28JavaScript

在JavaScript中实现类似<marquee>标签的滚动效果可以通过多种方式完成。以下是几种常见方法:

使用CSS动画结合JavaScript控制

通过CSS的@keyframestransform属性实现平滑滚动,JavaScript用于动态控制内容或启停。

js实现marquee

<style>
  .marquee-container {
    width: 100%;
    overflow: hidden;
    white-space: nowrap;
  }
  .marquee-content {
    display: inline-block;
    animation: scroll 10s linear infinite;
  }
  @keyframes scroll {
    0% { transform: translateX(100%); }
    100% { transform: translateX(-100%); }
  }
</style>

<div class="marquee-container">
  <div class="marquee-content" id="marqueeText">这里是滚动内容</div>
</div>

<script>
  // 动态更新内容
  document.getElementById('marqueeText').textContent = '新内容可以动态设置';
</script>

纯JavaScript实现

通过定时修改元素的style.leftstyle.marginLeft属性实现逐帧滚动。

<div id="marquee" style="width: 100%; overflow: hidden;">
  <div id="marqueeText" style="display: inline-block;">需要滚动的内容</div>
</div>

<script>
  const marqueeText = document.getElementById('marqueeText');
  const containerWidth = document.getElementById('marquee').offsetWidth;
  let position = containerWidth;

  function scrollMarquee() {
    if (position < -marqueeText.offsetWidth) {
      position = containerWidth;
    }
    position -= 1;
    marqueeText.style.transform = `translateX(${position}px)`;
    requestAnimationFrame(scrollMarquee);
  }

  scrollMarquee();
</script>

使用requestAnimationFrame优化性能

相比setIntervalrequestAnimationFrame能提供更流畅的动画效果。

js实现marquee

function startMarquee(element, speed = 1) {
  const textWidth = element.scrollWidth;
  let xPos = 0;

  function animate() {
    xPos -= speed;
    if (xPos < -textWidth) xPos = 0;
    element.style.transform = `translateX(${xPos}px)`;
    requestAnimationFrame(animate);
  }

  animate();
}

// 调用示例
startMarquee(document.getElementById('marqueeElement'));

反向滚动(从右到左)

修改CSS或JavaScript逻辑即可实现不同方向的滚动效果。

@keyframes reverseScroll {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

暂停与恢复功能

通过JavaScript控制CSS动画的animation-play-state属性。

const marquee = document.querySelector('.marquee-content');

// 暂停
marquee.style.animationPlayState = 'paused';

// 恢复
marquee.style.animationPlayState = 'running';

注意事项

  • 性能优化:对于长内容或高频更新,建议使用CSS动画而非JavaScript直接操作DOM。
  • 响应式设计:通过监听resize事件动态调整容器宽度。
  • 无障碍性:确保滚动内容可通过键盘操作暂停,或提供静态文本替代方案。

以上方法可根据实际需求选择或组合使用,CSS动画方案通常更适合现代浏览器,而纯JavaScript方案兼容性更广。

标签: jsmarquee
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…