Простая линейная анимация с ключевыми кадрами - PullRequest
0 голосов
/ 29 октября 2018

Я пытался сделать плавную анимацию, но в середине анимации есть что-то вроде "вырезанной ошибки".

Как я могу это исправить?

div,
div:after {
  width: 0vw;
  height: 3px;
  position: fixed;
  top: 1vw; bottom: 0;
  left: 40vw; right: 40vw;
  margin: auto;
/*  margin-top: -16px;*/

  z-index: 600;
  background-color: rgba(0, 0, 0, 1);
}

div {
  /*background-color: transparent;*/
/*  border-top: 3px solid rgba(0, 0, 0, 0.1);
  border-right: 3px solid rgba(0, 0, 0, 0.1);
  border-bottom: 3px solid rgba(0, 0, 0, 0.1);
  border-left: 3px solid black;
  -webkit-transform: translateZ(0);
          transform: translateZ(0);*/
  -webkit-animation-iteration-count:infinite;
          animation-iteration-count:infinite;
  -webkit-animation-timing-function: ease-in-out;
          animation-timing-function: ease-in-out;
  -webkit-animation-direction: alternate;
          animation-direction: alternate;
  -webkit-animation-duration: 1s;
          animation-duration: 1s;
  -webkit-animation-name: animsition-loading;
          animation-name: animsition-loading;
}

@-webkit-keyframes animsition-loading {
  0% {
    /*width: 0vw;*/
    transform:translate(0vw);
    width :0vw;
      margin-left: 0;
  }

  50% {
    /*width: 0vw;*/
    /*transform:translate(5vw);*/
    width :10vw;
    
  }

  100% {
    /*width: 0vw;*/
    transform:translate(1vw);
    width :0vw;
    margin-right: 0;
  }
}
<div> </div>

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Попробуйте настроить анимацию следующим образом:

@-webkit-keyframes animsition-loading {
  0% {

    width :0;
    left: 0;
  }

  50% {   
    width :10vw;

  }

  100% {    
    width :0;
    right: 0;
  }

Это тот эффект, который вы ищете?

0 голосов
/ 29 октября 2018

Попробуйте, и все готово ... Не используйте transform translate, вместо этого используйте только ширину.

div,
div:after {
  width: 0vw;
  height: 3px;
  position: fixed;
  top: 1vw; bottom: 0;
  left: 40vw; right: 40vw;
  margin: auto;
/*  margin-top: -16px;*/

  z-index: 600;
  background-color: rgba(0, 0, 0, 1);
}

div {
  /*background-color: transparent;*/
/*  border-top: 3px solid rgba(0, 0, 0, 0.1);
  border-right: 3px solid rgba(0, 0, 0, 0.1);
  border-bottom: 3px solid rgba(0, 0, 0, 0.1);
  border-left: 3px solid black;
  -webkit-transform: translateZ(0);
          transform: translateZ(0);*/
  -webkit-animation-iteration-count:infinite;
          animation-iteration-count:infinite;
  -webkit-animation-timing-function: ease-in-out;
          animation-timing-function: ease-in-out;
  -webkit-animation-direction: alternate;
          animation-direction: alternate;
  -webkit-animation-duration: 1s;
          animation-duration: 1s;
  -webkit-animation-name: animsition-loading;
          animation-name: animsition-loading;
}

@-webkit-keyframes animsition-loading {
  

0% {

    width :0;
    left: 0;
  }

  50% {   
    width :10vw;

  }

  100% {    
    width :0;
    right: 0;
  }
}
<div> </div>
0 голосов
/ 29 октября 2018

Вот еще один способ добиться того же с меньшим количеством кода:

.loading {
  height: 3px;
  position: fixed;
  top: 2vw;
  left: 40vw;
  right: 40vw;
  height: 3px;
  background: linear-gradient(#000, #000) left/0% 100% no-repeat;
  animation: anime 2s ease-in-out infinite alternate;
}

@keyframes anime {
  0% {
    background-size: 0% 100%;
    background-position: left;
  }
  50% {
    background-size: 70% 100%;
  }
  100% {
    background-size: 0% 100%;
    background-position: right;
  }
}
<div class="loading"></div>
...