当前位置:首页 > JavaScript

js实现无缝跑马灯效果

2026-04-04 12:24:17JavaScript

实现无缝跑马灯效果

使用CSS动画实现

通过CSS的@keyframesanimation属性实现水平滚动的跑马灯效果。

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

<div class="marquee">
  <div class="marquee-content">这里是需要滚动的内容,可以很长很长...</div>
</div>

使用JavaScript实现

通过JavaScript动态计算位置实现更灵活的控制。

function startMarquee(selector, speed) {
  const marquee = document.querySelector(selector);
  const content = marquee.firstElementChild;
  const clone = content.cloneNode(true);
  marquee.appendChild(clone);

  let progress = 0;
  const animate = () => {
    progress -= 1;
    if (-progress >= content.offsetWidth) {
      progress = 0;
    }
    content.style.transform = `translateX(${progress}px)`;
    clone.style.transform = `translateX(${progress + content.offsetWidth}px)`;
    requestAnimationFrame(animate);
  };
  animate();
}

startMarquee('.marquee', 2);

实现垂直滚动效果

修改CSS动画方向实现垂直滚动。

.marquee-vertical {
  height: 200px;
  overflow: hidden;
}
.marquee-content-vertical {
  animation: marquee-vertical 10s linear infinite;
}
@keyframes marquee-vertical {
  0% { transform: translateY(0); }
  100% { transform: translateY(-100%); }
}

响应式处理

添加窗口大小变化的监听,动态调整跑马灯效果。

window.addEventListener('resize', () => {
  const marquee = document.querySelector('.marquee');
  const content = marquee.firstElementChild;
  content.style.transform = 'translateX(0)';
});

暂停和继续功能

添加鼠标悬停暂停功能提升用户体验。

js实现无缝跑马灯效果

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

marquee.addEventListener('mouseenter', () => {
  isPaused = true;
});

marquee.addEventListener('mouseleave', () => {
  isPaused = false;
});

function animate() {
  if (!isPaused) {
    // 动画逻辑
  }
  requestAnimationFrame(animate);
}

以上方法提供了多种实现无缝跑马灯效果的方案,可根据具体需求选择合适的方式。CSS动画方案简单高效,JavaScript方案则提供了更多自定义控制的可能性。

标签: 跑马灯效果
分享给朋友:

相关文章

vue实现基金效果

vue实现基金效果

Vue 实现基金效果 在 Vue 中实现基金效果,通常指的是模拟基金的增长、波动或可视化展示。以下是几种常见的实现方式: 数据绑定与动态更新 通过 Vue 的数据绑定特性,可以动态展示基金净值的变化…

vue实现翻书效果

vue实现翻书效果

Vue实现翻书效果的方法 翻书效果可以通过CSS动画和Vue的动态绑定实现,以下是几种常见的实现方式: 使用CSS transform和transition 通过CSS的transform属性实现翻…

vue实现检索效果

vue实现检索效果

Vue实现检索功能的方法 在Vue中实现检索功能通常需要结合数据绑定、计算属性和方法。以下是几种常见的实现方式: 基础实现(基于计算属性) <template> <div>…

vue实现烟花效果

vue实现烟花效果

Vue 实现烟花效果的方法 在Vue中实现烟花效果可以通过结合Canvas绘图和动画技术来完成。以下是一种常见的实现方式: 创建Vue组件 新建一个名为Fireworks.vue的组件,核心逻辑如下…

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm i…

vue 实现动画效果

vue 实现动画效果

Vue 实现动画效果的方法 Vue 提供了多种方式实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的方法: 使用 Vue 内置过渡系统 Vue 的 <trans…