当前位置:首页 > 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属性,适合需要精确控制暂停、速度等交互的场景。

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();

响应式处理

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

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为例):

js实现走马灯效果

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

vue实现滚动效果

vue实现滚动效果

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

vue效果实现

vue效果实现

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

vue实现翻书效果

vue实现翻书效果

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

vue实现tab效果

vue实现tab效果

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

vue 实现滑动效果

vue 实现滑动效果

Vue 实现滑动效果的方法 使用 CSS Transition 通过 Vue 的 v-if 或 v-show 结合 CSS Transition 实现滑动效果。定义一个 CSS 类,利用 transf…