【问题标题】:CSS rotate does not animate after keyframe rotate-animation关键帧旋转动画后CSS旋转不动画
【发布时间】:2023-12-28 06:09:01
【问题描述】:

我想将 2 个 css 动画“串联”在一起。 第一个在页面加载时播放,是一个 css 动画,可以将立方体旋转一些角度。作为第二个动画,我想在用户按下按钮时进一步旋转该立方体(将类添加到立方体 onclick)。

问题是立方体 div 已经从第一个动画中获得了一个旋转语句,所以当我添加类(其中包含一个变换:旋转)时,它不会动画到新的旋转,而是跳到新的旋转度数立即。尽管我使用过渡。

我尝试使用添加的类('.rotate-further')禁用动画,这样它不会中断第二次旋转,但没有帮助

div {
  width: 20px;
  height: 20px;
  background: blue;
  animation: rotate 1s forwards;
}

.rotate-further {
  transform: rotate(150deg);
  animation: none;
}

@keyframes rotate {
    0% {
    -webkit-transform:rotate(0);
    transform: rotate(0);
  }

  100% {
    -webkit-transform: rotate(120deg);
    transform:rotate(120deg);
  }
}

我想要的结果是,例如,当您使用“transition: all .5s”时,第二次旋转会像平常一样进行动画处理。

window.setTimeout(function() {
  document.querySelector('div').classList.add('rotate-further');
}, 1500)
div {
  width: 20px;
  height: 20px;
  background: blue;
  animation: rotate 1s forwards;
}

.rotate-further {
  transform: rotate(150deg);
  animation: none;
}

@keyframes rotate {
  0% {
    -webkit-transform: rotate(0);
    transform: rotate(0);
  }
  100% {
    -webkit-transform: rotate(120deg);
    transform: rotate(120deg);
  }
}
<div></div>

【问题讨论】:

  • transform:rotate(x) 在你调用类时被重置。也没有过渡。您可以使用从 120deg 到 150deg 开始的另一个动画。动画时长也可以是0s ....

标签: css css-transitions css-animations keyframe


【解决方案1】:

您可以像下面这样编辑您的代码:

window.setTimeout(function() {
  document.querySelector('div').classList.add('rotate-further');
}, 1500)
div {
  width: 20px;
  height: 20px;
  background: blue;
  animation: rotate 1s;
  transform: rotate(120deg);
  transition:0.5s all
}

.rotate-further {
  transform: rotate(150deg);
}

@keyframes rotate {
  0% {
    transform: rotate(0);
  }

}
<div></div>

【讨论】: