问题
I'm building a marquee/carousel effect with 2 collections of items. Looping both item-collection
spans with translateX
is not difficult (here the fiddle), but I don't like the empty space at the end of each loop.
Knowing that both collections might differ in width, how could I achieve an effect of "continuity" so after the first loop, the first collection (cyan) appears right after the second (magenta).
Any pointer to CSS or JS solutions is highly appreciated... =)
回答1:
If the marquee is big enough, you can swap one of the collections at mid animation.
This is as far as you can get with CSS alone, I think
.marquee {
width: 100%;
height: 80px;
margin: 0 auto;
overflow: hidden;
white-space: nowrap;
border: 1px solid blue;
}
.marquee-content {
display: inline-block;
margin-top: 5px;
animation: marquee 5s linear infinite;
}
.item-collection-1 {
position: relative;
left: 0%;
animation: swap 5s linear infinite;
}
@keyframes swap {
0%, 50% {
left: 0%;
}
50.01%,
100% {
left: 100%;
}
}
.marquee-content:hover {
animation-play-state: paused
}
.item1 {
display: inline-block;
height: 70px;
width: 140px;
background: cyan;
vertical-align: top;
margin-left: 15px;
}
.item2 {
display: inline-block;
height: 70px;
width: 100px;
background: magenta;
vertical-align: top;
margin-left: 15px;
line-height: 14px;
}
/* Transition */
@keyframes marquee {
0% {
transform: translateX(0)
}
100% {
transform: translateX(-100%)
}
}
<div class="marquee">
<div class="marquee-content">
<span class="item-collection-1">
<span class="item1"></span>
<span class="item1"></span>
<span class="item1"></span>
<span class="item1"></span>
<span class="item1"></span>
<span class="item1"></span>
<span class="item1"></span>
</span>
<span class="item-collection-2">
<span class="item2"></span>
<span class="item2"></span>
<span class="item2"></span>
<span class="item2"></span>
<span class="item2"></span>
<span class="item2"></span>
<span class="item2"></span>
<span class="item2"></span>
</span>
</div>
<div>
来源:https://stackoverflow.com/questions/40873743/css3-marquee-ticker-animation-without-space-in-the-end