当前位置:首页 > JavaScript

js实现走马灯效果

2026-01-30 20:21:36JavaScript

使用CSS动画实现走马灯

通过CSS的@keyframesanimation属性实现水平滚动的走马灯效果。HTML结构需将内容包裹在双层容器中,外层设置overflow: hidden,内层通过动画横向移动。

<div class="marquee-container">
  <div class="marquee-content">
    <!-- 这里放置需要滚动的内容,重复多次确保无缝衔接 -->
    <span>走马灯内容1 | 走马灯内容2 | 走马灯内容3 | </span>
    <span>走马灯内容1 | 走马灯内容2 | 走马灯内容3 | </span>
  </div>
</div>
.marquee-container {
  overflow: hidden;
  white-space: nowrap;
  width: 100%;
}
.marquee-content {
  display: inline-block;
  animation: marquee 10s linear infinite;
}
@keyframes marquee {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

使用JavaScript动态控制

通过定时器动态修改元素的transform属性,适合需要精确控制暂停、速度等交互的场景。

js实现走马灯效果

const marquee = document.querySelector('.marquee-content');
let position = 0;
const speed = 1;

function animate() {
  position -= speed;
  if (position <= -marquee.scrollWidth / 2) {
    position = 0;
  }
  marquee.style.transform = `translateX(${position}px)`;
  requestAnimationFrame(animate);
}
animate();

响应式处理

当内容宽度不足时需要动态复制内容元素,确保无缝滚动效果。

js实现走马灯效果

function initMarquee() {
  const container = document.querySelector('.marquee-container');
  const content = document.querySelector('.marquee-content');

  // 复制内容直到填满两倍容器宽度
  while (content.scrollWidth < container.offsetWidth * 2) {
    content.innerHTML += content.innerHTML;
  }
}
window.addEventListener('resize', initMarquee);
initMarquee();

使用第三方库

如需复杂效果可考虑专用库:

  • swiper.js:支持触摸滑动和响应式断点
  • slick-carousel:提供丰富的配置选项
  • vue-marquee:Vue专用组件

安装示例(以Swiper为例):

npm install swiper
import Swiper from 'swiper';
new Swiper('.marquee-container', {
  loop: true,
  autoplay: { delay: 0 },
  speed: 5000,
  allowTouchMove: false,
  slidesPerView: 'auto'
});

性能优化建议

  • 使用will-change: transform提升动画性能
  • 避免频繁的DOM操作,优先使用CSS动画
  • 移动端考虑使用requestAnimationFrame替代setInterval
  • 隐藏时停止动画以节省资源:
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    entry.target.style.animationPlayState = 
      entry.isIntersecting ? 'running' : 'paused';
  });
});
observer.observe(document.querySelector('.marquee-container'));

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

相关文章

vue实现滚动效果

vue实现滚动效果

Vue 实现滚动效果的方法 使用原生滚动方法 通过 Vue 的 ref 获取 DOM 元素,调用原生 scrollTo 或 scrollIntoView 方法实现滚动。 <template&g…

vue效果实现

vue效果实现

Vue 效果实现方法 Vue.js 提供了多种方式实现动态效果,包括过渡动画、状态驱动的 UI 变化以及第三方动画库集成。以下是常见效果的实现方案: 过渡动画 使用 Vue 内置的 <tran…

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fil…

vue实现效果更新

vue实现效果更新

Vue 实现效果更新的方法 Vue 提供了多种方式实现动态效果更新,主要依赖其响应式系统和生命周期钩子。以下是几种常见的方法: 数据绑定与响应式更新 Vue 的核心是数据驱动视图。通过修改数据,视图…

vue实现抽屉效果

vue实现抽屉效果

Vue 实现抽屉效果的方法 使用 Vue 过渡动画和 CSS 在 Vue 中可以通过 v-if 或 v-show 控制抽屉的显示隐藏,结合 <transition> 组件实现平滑动画效果。…

vue 实现动画效果

vue 实现动画效果

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