最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - CSS3 MarqueeTicker animation without space in the end - Stack Overflow

programmeradmin1浏览0评论

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... =)

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... =)

Share Improve this question edited Nov 30, 2016 at 5:50 Harry 89.8k26 gold badges214 silver badges223 bronze badges asked Nov 29, 2016 at 19:00 sdudesdude 8,2352 gold badges23 silver badges25 bronze badges 1
  • 1 That is not really possible using CSS alone. There is a reason that most such slider scripts clone some elements ... – C3roe Commented Nov 29, 2016 at 19:03
Add a ment  | 

1 Answer 1

Reset to default 8

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>

发布评论

评论列表(0)

  1. 暂无评论