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

如何用CSS和HTML创建垂直动画滚动条?动态版本异常求助

问题原因

你遇到的最后一个元素与第一个元素同时显示的问题,核心是动画时长的计算逻辑错误:

  • 动态版本中,你将动画时长设为(($total_tickers - 1) * 2.5)s,导致总动画周期小于所有元素轮播一次的总时长
  • 最后一个元素的动画启动延迟恰好等于动画时长,所以它的动画启动时,第一个元素的下一轮动画也同时启动,造成重叠
解决方案

将动画时长从(($total_tickers - 1) * 2.5)s修改为($total_tickers * 2.5)s,让动画总周期等于所有元素轮播一次的总时长(每个元素占2.5s间隔)。

修改后的SCSS代码:

$total_tickers: 7;
.list {
  position: relative;
  width: 100%;
  height: 40px;

  .item {
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0;
    transform: translateY(10px);
    text-align: center;
    width: 100%;
    padding-left: 10px;
    padding-right: 10px;
  }

  @for $i from 1 to ($total_tickers + 1) {
    .ticker_#{$i} {
      animation: appear
        #{($total_tickers * 2.5)}s  // 修改为总元素数×2.5
        #{(($i - 1) * 2.5)}s
        infinite
        ease;
    }
  }
}

@keyframes appear {
  0% {
    opacity: 0;
  }
  7% {
    opacity: 1;
    transform: translateY(0);
  }
  10% {
    opacity: 1;
    transform: translateY(0);
  }
  14% {
    opacity: 0;
    transform: translateY(-10px);
  }
  100% {
    opacity: 0;
    transform: translateY(0);
  }
}
原理说明

修改后,每个元素的动画周期等于所有元素轮播一遍的总时长:

  • 第N个元素的启动延迟为(N-1)*2.5s,刚好在前一个元素结束展示后启动
  • 动画总时长覆盖完整轮播周期,最后一个元素的动画结束阶段(opacity变为0)完成后,第一个元素的下一轮动画才会启动,彻底避免重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:24:17