CSS过渡在重新启动动画之前有延迟

Posted

技术标签:

【中文标题】CSS过渡在重新启动动画之前有延迟【英文标题】:CSS transition has a delay before restarting the animation 【发布时间】:2022-01-18 20:55:26 【问题描述】:

我不知道我在哪里出错了,但是在普通的 html + CSS 中,这段代码可以正常工作,但是现在我正在移动以反应动画在重新启动之前有延迟。

我希望动画无限滚动,但它会在最后停止然后重新启动。

HTML 代码

    <div className="carousel">
      <div className="slider">
        <div className="slide_track">
          <div className="slide">
            <div className="slide_img">slide 1</div>
          </div>
          <div className="slide">
            <div className="slide_img">slide 2</div>
          </div>
          <div className="slide">
            <div className="slide_img">slide 3</div>
          </div>
          <div className="slide">
            <div className="slide_img">slide 4</div>
          </div>
          <div className="slide">
            <div className="slide_img">slide 5</div>
          </div>
          <div className="slide">
            <div className="slide_img">slide 6</div>
          </div>
          <div className="slide">
            <div className="slide_img">slide 7</div>
          </div>
        </div>
      </div>
    </div>

CSS

.slider 
  box-shadow: none;
  height: 100px;
  margin: auto;
  overflow: hidden;
  position: relative;
  width: auto;
  background-color: lightcoral;
  max-width: 1600px;


.slider::before,
.slider::after 
  background: linear-gradient(to right, #fff 0%, rgba(255, 255, 255, 0) 100%);
  content: "";
  height: 100px;
  position: absolute;
  width: 200px;
  z-index: 2;


.slide_img 
  background-color: navy;
  color: #fff;


.slider::after 
  right: 0;
  top: 0;
  -webkit-transform: rotateZ(180deg);
  transform: rotateZ(180deg);


.slider::before 
  left: 0;
  top: 0;


.slider .slide_track 
  animation-name: scroll;
  -webkit-animation-name: scroll;
  animation-duration: 40s;
  -webkit-animation-duration: 40s;
  animation-delay: 0;
  -webkit-animation-delay: 0;
  animation-iteration-count: infinite;
  -webkit-animation-iteration-count: infinite;
  animation-timing-function: linear;
  -webkit-animation-timing-function: linear;
  display: flex;
  width: calc(250px * 7);


.slider .slide 
  height: 100px;
  width: 250px;


@media screen and (max-width: 992px) 
  .slider 
    width: 100%;
  


@-webkit-keyframes scroll 
  0% 
    -webkit-transform: translateX(0);
    transform: translateX(0);
  

  100% 
    -webkit-transform: translateX(calc(-250px * 5));
    transform: translateX(calc(-250px * 5));
  


@keyframes scroll 
  0% 
    -webkit-transform: translateX(0);
    transform: translateX(0);
  

  100% 
    -webkit-transform: translateX(calc(-250px * 7));
    transform: translateX(calc(-250px * 7));
  

我试过这样的速记代码

  -webkit-animation: scroll 40s linear infinite;
  animation: scroll 40s linear infinite;

还有很长的

  animation-name: scroll;
  -webkit-animation-name: scroll;
  animation-duration: 40s;
  -webkit-animation-duration: 40s;
  animation-delay: 0;
  -webkit-animation-delay: 0;
  animation-iteration-count: infinite;
  -webkit-animation-iteration-count: infinite;
  animation-timing-function: linear;
  -webkit-animation-timing-function: linear;

我为此制作了代码和沙箱,您可以自己看看。

真的很难过,希望有人能提供帮助,因为这似乎是一个简单的解决方法 :)

Codeandsandbox

【问题讨论】:

请提供所有相关代码以提供minimal reproducible sample 【参考方案1】:

这与动画的渲染方式有关。

这可能会解决问题,我的建议是尝试一下,看看是否适合您。

@keyframes scroll 
  0% 
    -webkit-transform: translateX(50%);
    transform: translateX(50%);
  

初始值会使元素在窗口之外,并且没有人会注意到重置

【讨论】:

我在 codeandsandbox 链接中测试了您的代码,但它不起作用。它仍然留下一个巨大的差距,你可以看到蓝色没有连接 我认为它与元素的宽度和滑块的宽度有关,***.com/questions/30032646/…上有一个答案

以上是关于CSS过渡在重新启动动画之前有延迟的主要内容,如果未能解决你的问题,请参考以下文章

重新启动时如何使这个 CSS 关键帧动画平滑?

八.CSS之animation(动画)

css3过渡和动画的区别详解

在 CSS3 中重新启动动画:比删除元素更好的方法吗?

如何设置动画和过渡属性

css3过渡(transition)和动画(animation)变换(transform )