代码之家  ›  专栏  ›  技术社区  ›  Sederfo

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

  •  1
  • Sederfo  · 技术社区  · 3 年前

    我试图将两个变换链接在一起,但我希望第二个变换在第一个变换结束后开始。

    这就是我试图做到的:

    .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)以向上移动缩放的元素。

    代码笔链接: https://codepen.io/Sederfo/pen/abqOoOP

    2 回复  |  直到 3 年前
        1
  •  2
  •   Asplund Ransh Anand    3 年前

    使用 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>
        2
  •  1
  •   UPinar    3 年前

    你可以用这样的东西。

    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>