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

vue实现tag效果

实现基本标签结构 使用 Vue 的模板语法创建标签容器和单个标签元素。通过 v-for 动态渲染标签列表,结合 v-bind:key 确保渲染性能。 <template> <…

react如何添加效果

react如何添加效果

React 添加动画效果的方法 使用 CSS 过渡动画 在 React 组件中直接通过 className 或 style 属性应用 CSS 过渡效果。定义 CSS 类包含 transition 属性…

vue实现tab效果

vue实现tab效果

Vue 实现 Tab 效果的方法 使用动态组件和 v-if 通过 v-if 或 v-show 控制不同标签内容的显示与隐藏,结合点击事件切换当前激活的标签页。 <template>…

vue实现过度效果

vue实现过度效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。…

vue实现回弹效果

vue实现回弹效果

Vue 实现回弹效果的方法 回弹效果(Bounce Effect)常见于移动端交互,可以通过 CSS 动画或 JavaScript 实现。以下是几种在 Vue 中实现回弹效果的方案: 使用 CSS…

vue实现slideup效果

vue实现slideup效果

实现 SlideUp 效果的 Vue 方法 使用 CSS Transition 和 Vue 指令 通过 Vue 的 v-show 或 v-if 结合 CSS Transition 实现滑动效果。定义一…