当前位置:首页 > 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实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现显示隐藏

js实现显示隐藏

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

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…