Анимированные точки с CSS, заставляя их двигаться вечно - PullRequest
0 голосов
/ 07 апреля 2019

Я не могу заставить эту анимацию двигаться вечно, не добавляя больше точек в промежутке.Я бы хотел, чтобы количество точек не зависело от класса «loading-dots», так как добавление большего количества точек увеличивает длительность, но это боль.Возможно ли иметь одну точку, но оживить ее навсегда.Мне нравится возможность менять скорость и направление.

Вот вам CodePen

* {
  box-sizing: border-box;
}

body {
  padding: 50px;
  background: white;
}

.container {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 20px 20px 0px 20px;
}

.loading-container {
  overflow: hidden;
  float: left;
  width: 200px;
}

.loading-dots {
  display: inline-block;
  animation-name: loading-dots;
  animation-duration: 5s;
  animation-timing-function: linear;
  font-size: 50px;
  position: relative;
  top: -27px;
  color: rgba(blue, 1);
  font-family: sans-serif;
  white-space: no-wrap;
}

.loading-title {
  overflow: display;
  position: relative;
  font-size: 30px;
  top: 10px;
  margin-right: 10px;
  font-family: monospace;
  color: rgba(white, 1);
  float: left;
}

@keyframes loading-dots {
  0% {
    transform: translateX(-600px);
  }
  100% {
    transform: translateX(0px);
  }
}
<div class="container">
  <span class="loading-title"></span>
  <div class="loading-container">
    <span class="loading-dots">.................
      </span>
  </div>
</div>

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Уменьшить отрицательный запас пикселей.-600px довольно много для 16 точек.

@keyframes loading-dots {
  0% {
    transform: translateX(-50px);
  }
  100% {
    transform: translateX(0px);
  }
}
0 голосов
/ 07 апреля 2019

Вы можете сделать это с простым фоном, где будет легко управлять анимацией, а также размером ваших точек:

.dots {
  height:5px; /*to control the overall height*/
  width:200px; /*to control the overall width*/
  margin:50px;
  background-image:
    repeating-linear-gradient(to right,
     transparent,transparent 5px, /*5px of transparent*/
     blue 5px,blue 10px); /*then 5px of blue */
  background-size:200% 100%;
  animation:change 3s linear infinite;
}

@keyframes change{
  to {
    background-position:right;
  }
}
<div class="dots"></div>

Чтобы изменить направление, просто измените положение:

.dots {
  height:5px;
  width:200px;
  margin:50px;
  background-image:
    repeating-linear-gradient(to right,
     transparent,transparent 5px,
     blue 5px,blue 10px);
  background-size:200% 100%;
  background-position:right;
  animation:change 3s linear infinite;
}

@keyframes change{
  to {
    background-position:left;
  }
}
<div class="dots"></div>

Вы можете проверить это для более подробной информации о различных используемых значениях: Использование процентных значений с положением фона на линейном градиенте


Еще одна идея с использованием анимации при преобразовании:

.dots {
  height:5px;
  width:200px;
  margin:50px;
  position:relative;
  overflow:hidden;
}
.dots::before {
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:-100%;
  bottom:0;
  background-image:
    repeating-linear-gradient(to right,
     transparent,transparent 5px,
     blue 5px,blue 10px);
  animation:change 3s linear infinite;

}

@keyframes change{
  to {
    transform:translateX(-50%);
  }
}
<div class="dots"></div>

Изменение направления:

.dots {
  height:5px;
  width:200px;
  margin:50px;
  position:relative;
  overflow:hidden;
}
.dots::before {
  content:"";
  position:absolute;
  top:0;
  left:-100%;
  right:0;
  bottom:0;
  background-image:
    repeating-linear-gradient(to right,
     transparent,transparent 5px,
     blue 5px,blue 10px);
  animation:change 3s linear infinite;

}

@keyframes change{
  to {
    transform:translateX(50%);
  }
}
<div class="dots"></div>
...