动画旋转器在IE隐藏/显示后以相同的速度旋转

Animated spinner spins at same speed in IE after hiding/showing

本文关键字:旋转 速度 IE 隐藏 动画 显示      更新时间:2023-09-26

我有一个css动画微调器。它使用动画来旋转。元素上有一个边界,its:before和its:after。每个边界以不同的速度旋转。它在第一页加载时工作得很好,但在IE中,如果它被隐藏然后再次显示,它都以相同的速度旋转。

下面的例子演示了这个问题:这是我的css:

.loader-wrapper {
  position: relative;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 1000;
}
.loader-wrapper .loader {
  display: block;
  position: absolute;
  left: 50%;
  top: 50%;
  width: 150px;
  height: 150px;
  margin: -75px 0 0 -75px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #2372b9;
  -webkit-animation: spin 2s linear infinite;
  /* Chrome, Opera 15+, Safari 5+ */
  -moz-animation: spin 2s linear infinite;
  -o-animation: spin 2s linear infinite;
  animation: spin 2s linear infinite;
  /* Chrome, Firefox 16+, IE 10+, Opera */
}
.loader-wrapper .loader:before {
  content: "";
  position: absolute;
  top: 5px;
  left: 5px;
  right: 5px;
  bottom: 5px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #f47b27;
  -webkit-animation: spin 3s linear infinite;
  /* Chrome, Opera 15+, Safari 5+ */
  -moz-animation: spin 3s linear infinite;
  -o-animation: spin 3s linear infinite;
  animation: spin 3s linear infinite;
  /* Chrome, Firefox 16+, IE 10+, Opera */
}
.loader-wrapper .loader:after {
  content: "";
  position: absolute;
  top: 15px;
  left: 15px;
  right: 15px;
  bottom: 15px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #6ba543;
  -moz-animation: spin 1.5s linear infinite;
  -o-animation: spin 1.5s linear infinite;
  -webkit-animation: spin 1.5s linear infinite;
  animation: spin 1.5s linear infinite;
  /* Chrome, Firefox 16+, IE 10+, Opera */
}
@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0);
    /* Chrome, Opera 15+, Safari 3.1+ */
    -ms-transform: rotate(0);
    /* IE 9 */
    -moz-transform: rotate(0);
    -o-transform: rotate(0);
    transform: rotate(0);
    /* Firefox 16+, IE 10+, Opera */
  }
  100% {
    -webkit-transform: rotate(360deg);
    /* Chrome, Opera 15+, Safari 3.1+ */
    -ms-transform: rotate(360deg);
    /* IE 9 */
    -moz-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
    /* Firefox 16+, IE 10+, Opera */
  }
}
@-moz-keyframes spin {
  0% {
    -webkit-transform: rotate(0);
    /* Chrome, Opera 15+, Safari 3.1+ */
    -ms-transform: rotate(0);
    /* IE 9 */
    -moz-transform: rotate(0);
    -o-transform: rotate(0);
    transform: rotate(0);
    /* Firefox 16+, IE 10+, Opera */
  }
  100% {
    -webkit-transform: rotate(360deg);
    /* Chrome, Opera 15+, Safari 3.1+ */
    -ms-transform: rotate(360deg);
    /* IE 9 */
    -moz-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
    /* Firefox 16+, IE 10+, Opera */
  }
}
@keyframes spin {
  0% {
    -webkit-transform: rotate(0);
    /* Chrome, Opera 15+, Safari 3.1+ */
    -ms-transform: rotate(0);
    /* IE 9 */
    -moz-transform: rotate(0);
    -o-transform: rotate(0);
    transform: rotate(0);
    /* Firefox 16+, IE 10+, Opera */
  }
  100% {
    -webkit-transform: rotate(360deg);
    /* Chrome, Opera 15+, Safari 3.1+ */
    -ms-transform: rotate(360deg);
    /* IE 9 */
    -moz-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
    /* Firefox 16+, IE 10+, Opera */
  }
}

我的html:

<div class="loader-wrapper">
    <div class="loader"></div>
</div>
<a href="javascript:void(0);">Hide/show</a>

和我的javascript:

$("a").on("click", function() {
    if($(".loader").is(":visible")) {
        $(".loader").hide();
    }
    else {
        $(".loader").show();
    }
});

我不知道为什么会发生这种情况——你可能只是在IE对display属性的解释中发现了一个bug,或者它如何处理伪元素。你最好的办法可能是尝试另一种方法。使用overflow: hidden切换隐藏类

.hide { height: 0; overflow: hidden; }

http://jsfiddle.net/9comfnob/1/