当前位置:首页 > JavaScript

js实现文字滚动

2026-04-03 21:18:30JavaScript

实现文字水平滚动效果

使用CSS动画结合JavaScript控制文字水平滚动,适用于跑马灯或公告栏效果。

<div id="scrollText" style="white-space: nowrap; overflow: hidden; width: 300px;">
  这是一段需要滚动的文字内容,可以替换为任意需要展示的信息
</div>
const scrollElement = document.getElementById('scrollText');
const textWidth = scrollElement.scrollWidth;
const containerWidth = scrollElement.clientWidth;

scrollElement.style.animation = `scroll ${textWidth/50}s linear infinite`;

const style = document.createElement('style');
style.innerHTML = `
  @keyframes scroll {
    0% { transform: translateX(${containerWidth}px); }
    100% { transform: translateX(-${textWidth}px); }
  }
`;
document.head.appendChild(style);

实现垂直滚动列表效果

适用于新闻列表或公告的垂直滚动展示,通过定时改变位置实现。

<ul id="verticalScroll" style="height: 100px; overflow: hidden;">
  <li>第一条消息</li>
  <li>第二条消息</li>
  <li>第三条消息</li>
  <li>第四条消息</li>
</ul>
const list = document.getElementById('verticalScroll');
const items = list.querySelectorAll('li');
let currentIndex = 0;

function scrollVertically() {
  currentIndex = (currentIndex + 1) % items.length;
  list.style.transition = 'transform 0.5s ease';
  list.style.transform = `translateY(-${currentIndex * 100}px)`;

  // 循环时重置动画
  if(currentIndex === items.length - 1) {
    setTimeout(() => {
      list.style.transition = 'none';
      list.style.transform = 'translateY(0)';
      setTimeout(() => {
        list.style.transition = 'transform 0.5s ease';
      }, 50);
    }, 500);
  }
}

setInterval(scrollVertically, 2000);

使用Marquee标签的现代替代方案

虽然HTML原生有标签,但已不推荐使用。以下是用现代技术实现的替代方案:

<div class="marquee">
  <div class="marquee-content">
    <span>滚动内容第一部分</span>
    <span>滚动内容第二部分</span>
    <span>滚动内容第三部分</span>
  </div>
  <!-- 复制内容实现无缝循环 -->
  <div class="marquee-content" aria-hidden="true">
    <span>滚动内容第一部分</span>
    <span>滚动内容第二部分</span>
    <span>滚动内容第三部分</span>
  </div>
</div>
.marquee {
  overflow: hidden;
  white-space: nowrap;
  position: relative;
}

.marquee-content {
  display: inline-block;
  animation: marquee 10s linear infinite;
}

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

响应式文字滚动解决方案

根据容器宽度自动调整滚动速度和效果,适用于不同屏幕尺寸。

js实现文字滚动

function responsiveTextScroll(elementId) {
  const element = document.getElementById(elementId);
  const containerWidth = element.offsetWidth;
  const textWidth = element.scrollWidth;

  if(textWidth > containerWidth) {
    const duration = textWidth / 50; // 控制速度
    element.style.animation = `scroll ${duration}s linear infinite`;

    const style = document.createElement('style');
    style.innerHTML = `
      @keyframes scroll {
        0% { transform: translateX(${containerWidth}px); }
        100% { transform: translateX(-${textWidth}px); }
      }
    `;
    document.head.appendChild(style);
  } else {
    element.style.animation = 'none';
  }
}

// 窗口大小改变时重新计算
window.addEventListener('resize', () => {
  responsiveTextScroll('scrollContainer');
});

// 初始化执行
responsiveTextScroll('scrollContainer');

以上方案可根据实际需求选择使用,通过调整CSS动画参数可以控制滚动速度和方向。对于复杂场景,可以考虑使用专门的滚动库如iScroll或Slick等。

标签: 文字js
分享给朋友:

相关文章

vue实现轮播文字

vue实现轮播文字

Vue实现轮播文字的方法 使用Vue的transition组件 在Vue中可以通过transition组件结合CSS动画实现文字轮播效果。定义一个数组存储需要轮播的文字内容,通过定时器切换当前显示的索…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…