是否可以将相同的html元素创建一个无尽的循环,从顶部滚动到底部,并产生类似门户的效果?

问题描述 投票:0回答:1

我试图使用一组html元素创建一个无尽的动画循环,类似于marquee。我们的目标是在动画开始时,所有元素都在容器中可见,每个元素都向下滑动。一旦底部元素开始出格,它就会再次出现在容器的顶部。

到目前为止,我所做的,是重复我想要重复的元素,并为每一组元素添加不同的动画。第一组元素的动画被设置为从屏幕外开始,并以第二组元素动画所需时间的两倍从屏幕的另一端一直向下。

第二组元素将从容器的顶部开始,然后从那里离开屏幕。

我在这个动画的第一次迭代中得到了想要的结果,但随后就出现了一个巨大的白色空间。所以,我并没有真正正确地重复这个动画。

我在想我可以用javascript设置一个时间间隔,这样每次动画结束时,我就可以把元素重新定位回它们的起始位置,但我不确定这是否是最好的实现方式。

   

 .slider {
        height: 200px;
        background-color: #ddd;
        border:solid 1px black;
        margin: 0 auto;
        overflow: hidden;
        white-space: nowrap;
        position: relative;
        display:flex;
        justify-content: flex-start;
        flex-direction: column;
      }
      .slide{
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        font-size: 20px;
        position: absolute;
        width:100%;
      }

      .slide > div{
        height:calc(200/8);
        width:100%;
        border:solid 1px red;
        display:flex;
        justify-content: center;
      }

      .one{
          top:-100%;
          animation:slider2 18s linear infinite;
      }
      
      .two{
          top:0px;
          animation: slider 9s linear infinite;
      }
      
      @keyframes slider {
        0%   { top:0px; }
        100%   { top:100% }
      }

      @keyframes slider2{
        0%   { top:-100%; }
        100%   { top:100% }
      }
   

 <body>

        <div class='slider'>
            <div class='slide one'>
                <div>1</div>
                <div>2</div>
                <div>3</div>
                <div>4</div>
                <div>5</div>
                <div>6</div>
                <div>7</div>
                <div>8</div>
            </div>
            <div class='slide two'>
                <div>1</div>
                <div>2</div>
                <div>3</div>
                <div>4</div>
                <div>5</div>
                <div>6</div>
                <div>7</div>
                <div>8</div>
            </div>
        </div>
           
          
    </body>
javascript jquery css css-animations marquee
1个回答
0
投票

https:/codepen.ioNerdpuffpenPoPXNpQ

问题是动画没有在正确的时间 "重置"。

我把它改了,所以两个动画都采取了 9s 且两者行程相差无几。但它们叠加。

slider2 正要 top: 0% 和复位。slider 启动于 0% 并 "继续循环"。

© www.soinside.com 2019 - 2024. All rights reserved.