You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现无间隙的连续Logo滚动效果?

解决Logo滚动轮播无缝衔接问题

问题描述

开发的Logo滚动轮播组件,最后一个Logo与重复出现的第一个Logo之间存在明显间隙,无法实现无缝滚动。

解决方案

要实现无缝滚动,核心是让轮播容器内的内容重复一份,确保动画循环时视觉上无断点,同时调整相关样式和逻辑:

1. 修改HTML结构

在.logo-scroller__row内部,复制所有.logo-scroller__item元素,让容器内拥有两组完全相同的Logo列表:

<div class="logo-scroller-wrap">
  <div class="logo-scroller1" data-paused="false">
    <div class="logo-scroller__row">
      <!-- 原有的19个Logo item -->
      <div class="logo-scroller__item">
        <div class="logo-scroller__logo">
          <img src="https://dynamikinfluence.com/staging/wp-content/uploads/2023/12/Our-Work-Logos_Xbox-1.svg" alt="" />
        </div>
      </div>
      <!-- ... 省略其他原有的item ... -->
      <div class="logo-scroller__item">
        <div class="logo-scroller__logo">
          <img src="https://dynamikinfluence.com/staging/wp-content/uploads/2023/12/Our-Work-Logos_GM-1.svg" alt="" />
        </div>
      </div>

      <!-- 复制一份所有item,实现无缝衔接 -->
      <div class="logo-scroller__item">
        <div class="logo-scroller__logo">
          <img src="https://dynamikinfluence.com/staging/wp-content/uploads/2023/12/Our-Work-Logos_Xbox-1.svg" alt="" />
        </div>
      </div>
      <!-- ... 省略其他复制的item ... -->
      <div class="logo-scroller__item">
        <div class="logo-scroller__logo">
          <img src="https://dynamikinfluence.com/staging/wp-content/uploads/2023/12/Our-Work-Logos_GM-1.svg" alt="" />
        </div>
      </div>
    </div>
  </div>
</div>

2. 调整CSS样式

移除.logo-scroller__row的固定宽度,让它自适应内容宽度,避免复制后内容溢出或显示异常:

@-webkit-keyframes infiniteLogoScrollLeft {
    0% {
        transform: translateX(0%);
      }
      100% {
        transform: translateX(-100%);
      }
}

@keyframes infiniteLogoScrollLeft {
    0% {
      transform: translateX(0%);
    }
    100% {
      transform: translateX(-100%);
    }
}

.logo-scroller-wrap{
  overflow: hidden;
}

.logo-scroller1 .logo-scroller__row {
    display: flex;
    margin: 24px 0;
    height: 132px;
    animation-name: infiniteLogoScrollLeft;
    animation-timing-function: linear;
    animation-delay: 0s;
    animation-iteration-count: infinite;
    animation-duration: 90s;
    position: relative;
    overflow: hidden;
    /* 移除固定宽度,让容器自适应内容 */
    /* width: 4940px; */
    margin: 0 auto;
}

.logo-scroller1 .logo-scroller__item {
    box-sizing: border-box;
    padding: 0 5px;
}

.logo-scroller__logo {
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 250px;
    height: 123px;
    padding: 15px 25px;
}

3. 优化JavaScript逻辑

原JS代码给每个item单独设置动画延迟,会和容器的整体滚动动画冲突,导致间隙问题。移除这部分逻辑,让容器的整体动画控制滚动:

// 移除原有的item动画延迟逻辑,若需要暂停功能可保留如下可选代码
let logoScroller1 = document.querySelector('.logo-scroller1');
// logoScroller1.addEventListener('mouseenter', () => {
//   logoScroller1.querySelector('.logo-scroller__row').style.animationPlayState = 'paused';
// });
// logoScroller1.addEventListener('mouseleave', () => {
//   logoScroller1.querySelector('.logo-scroller__row').style.animationPlayState = 'running';
// });

原理说明

当容器内有两组相同的Logo列表时,动画将整个容器向左平移100%(第一组Logo完全移出视野),此时第二组Logo刚好完全进入视野。由于两组内容完全一致,动画循环时,第二组的末尾会和第一组的开头无缝衔接,视觉上就不会出现间隙。

内容的提问来源于stack exchange,提问作者user2052567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:00:56