为什么动画结束后元素的宽度会改变?

时间:2019-04-02 13:18:10

标签: javascript jquery html css css3

我正在学习jQuery,测试其功能,并且对我编写的示例有疑问。

https://codepen.io/MaxVelichkin/pen/pBJeZy

/*remove animate2 class and assign animate1 class to target*/
$(function() {
  $('#trigger').on('click', function() {
    $('#target').removeClass('animate2');
    $('#target').addClass('animate1');
  });
});

/*remove animate1 class and assign animate2 class to target*/
$(function() {
  $('#trigger2').on('click', function() {
    $('#target').removeClass('animate1');
    $('#target').addClass('animate2');
  });
});
/*just a container around*/

#container {
  margin: 10px;
  width: 350px;
  height: 350px;
  border: solid green 1px;
}


/*green button*/

#trigger {
  width: 50px;
  height: 50px;
  border-radius: 100%;
  background-color: green;
  margin: 20px auto;
}


/*red button*/

#trigger2 {
  width: 50px;
  height: 50px;
  border-radius: 100%;
  background-color: red;
  margin: 20px auto;
}


/*Target div which will be changing*/

#target {
  width: 100px;
  height: 100px;
  border: solid blue 1px;
  margin: 10px auto;
}


/*Keyframes for green button*/

@keyframes myfirst {
  0% {
    background: white;
    width: 100px;
    height: 100px;
    border-radius: 0%;
  }
  100% {
    background: blue;
    width: 150px;
    border-radius: 100%;
  }
}


/*Keyframes for red button*/

@keyframes mysecond {
  0% {
    background: blue;
    width: 150px;
    border-radius: 100%;
  }
  100% {
    background: white;
    width: 100px;
    height: 100px;
    border-radius: 0%;
  }
}


/*cusstom class to be assigned by green button*/

.animate1 {
  -webkit-animation: myfirst 3s;
  animation: myfirst 3s;
  height: 100px;
  background: blue;
  width: 150px;
  border-radius: 100%;
  margin: 10px auto;
}


/*cusstom class to be assigned by red button*/

.animate2 {
  -webkit-animation: mysecond 3s;
  animation: mysecond 3s;
  height: 100px;
  width: 150px;
  border: solid red 1px;
  border-radius: 0%;
  margin: 10px auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <div id="trigger"></div>
  <div id="trigger2"></div>
  <div id="target"></div>
</div>

有:

  • 2个按钮,绿色和红色。
  • 2组关键帧。
  • 2个自定义类,这些类开始相应关键帧的动画并从最后一个关键帧开始应用样式。
  • 目标div,我要在单击按钮时更改哪种样式。

当我单击按钮时,它将为目标div分配一个类,并删除由另一个按钮分配的类。

问题1:为什么在绿色按钮动画结束后目标div的宽度又变回100px(为什么它不保持150px)?

问题2:我是否做对了所有事情,或者有更好的jQuery方法?

2 个答案:

答案 0 :(得分:2)

您的#target优先,因为它是一个ID选择器。宽度为100px。您的班级animate1被覆盖,因此这就是为什么您看不到150px的原因。

css console

答案 1 :(得分:-1)

您可以像这样的动画进行编码:myfirst 3s forwords;