具有关键帧的简单线条动画

时间:2018-10-29 13:03:23

标签: html css css-animations keyframe

我试图制作平滑的动画,但是动画中间有一种“剪切错误”。

我该如何解决?

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 :(得分:1)

这是用更少的代码实现相同目标的另一种方法:

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

答案 1 :(得分:0)

尝试以这种方式设置动画:

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

    width :0;
    left: 0;
  }

  50% {   
    width :10vw;

  }

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

您正在寻找的效果吗?

答案 2 :(得分:0)

尝试一下,您就完成了... 不要使用转换翻译,而只能使用宽度。

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>