当前位置:首页 > 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'));

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

相关文章

js实现滚动条效果

js实现滚动条效果

实现滚动条效果的方法 使用原生JavaScript实现滚动条 通过监听滚动事件,可以动态调整滚动条的位置和样式。以下是一个基础实现示例: // 获取DOM元素 const container =…

vue实现翻页效果

vue实现翻页效果

使用Vue实现翻页效果 在Vue中实现翻页效果通常需要结合分页组件和数据处理逻辑。以下是几种常见方法: 基础分页组件实现 <template> <div> &l…

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升动…

vue实现吸附效果

vue实现吸附效果

实现吸附效果的基本思路 吸附效果通常指当页面滚动到某个位置时,元素固定在视口的特定位置。Vue中可以通过监听滚动事件结合CSS的position: sticky或动态样式切换实现。 使用CSS的po…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…

vue实现点选效果

vue实现点选效果

实现点选效果的基本思路 在Vue中实现点选效果通常涉及监听用户的点击事件,并通过动态绑定类名或样式来改变元素的外观。核心是利用Vue的响应式数据和事件绑定机制。 使用v-bind和v-on实现 通…