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

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

相关文章

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

vue实现轮播效果

vue实现轮播效果

使用Swiper插件实现轮播 安装Swiper及相关依赖: npm install swiper vue-awesome-swiper 组件代码示例: <template> <…

vue实现菜单效果

vue实现菜单效果

Vue实现菜单效果的方法 基础菜单实现 使用Vue的v-for指令和v-show/v-if可以快速实现基础菜单。通过数据驱动的方式渲染菜单项,结合事件处理实现交互。 <template>…

vue实现不了效果

vue实现不了效果

在 Vue 中实现特定效果时遇到问题,通常与代码逻辑、数据绑定或生命周期管理有关。以下是常见排查方向和解决方案: 检查数据绑定 确保数据已正确声明并在模板中绑定。Vue 的响应式系统依赖 data…

vue实现回弹效果

vue实现回弹效果

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

vue实现卡片效果

vue实现卡片效果

Vue实现卡片效果的方法 使用Vue实现卡片效果可以通过多种方式完成,包括使用原生CSS、UI框架或自定义组件。以下是几种常见方法: 使用原生CSS和Vue组件 创建一个简单的卡片组件,结合CSS实…