在上一个转换结束后将转换应用于 CSS 元素

Apply transformation to CSS element after previous transformation ended

我正在尝试将 2 个转换链接在一起,但我希望第 2 个转换在第一个转换结束后开始。

我正在尝试这样做:

.trailingNote {
  position:absolute;
  bottom:0px;
  background:black;
  width:20px;
  transition: transform  5s;
  transition-timing-function: linear;

  }
.trailingNote-moveUp{
  transform: scaleY(10) translateY(-200px);
}

基本上,我希望元素在y轴上缩放10,然后在scaleY结束后,开始translateY(-200px)将缩放后的元素向上移动。

Link 到 CodePen:https://codepen.io/Sederfo/pen/abqOoOP

使用CSS keyframes

function startAnimation() {
  var element = document.getElementById("x");
  element.classList.add("trailingNote-moveUp");
}
.trailingNote {
  position:absolute;
  bottom:0px;
  background:black;
  width: 20px;
}
 
.trailingNote:hover, .trailingNote-moveUp {
  animation: animate 5s linear forwards;
}


@keyframes animate {
  0% {
    transform: none;
  }
  50% {
    transform: scaleY(10);
  }
  100% {
    transform: scaleY(10) translateY(-200px);
  }
}
<div id="x" class="trailingNote">Note</div>
<button onclick="startAnimation()">Animate</button>

你可以使用类似这样的东西。

const box = document.getElementById('box');

const button = document.querySelector('button');

button.addEventListener('click', () =>{
    box.classList.add('transform-1');
    box.addEventListener('transitionend', () =>{
        setTimeout(function (){
            box.classList.add('transform-2');
        },1000)
    })
});
*,
*::before,
*::after {
  box-sizing: border-box;
}


body {
  min-height: 100vh;
  margin: 0;
  background-color: bisque;
  display: grid;
  place-content: center;
}

button{
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%,-50%);
}
.box{
  width: 5rem;
  height: 5rem;
  background-color: brown;
  transition: all  1s linear;
}

.transform-1{
  transform: scaleY(5);
}

.transform-2{
  transform: translateY(-2000px);
}
<div class="box" id="box"></div>
<button>Click me</button>