Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> CSS

สร้างเอฟเฟกต์ Hinge (พลิกตัว) ด้วย CSS Animation


เอฟเฟกต์ Hinge

องค์ประกอบหมุนรอบมุมซ้ายบน (top left) คล้ายประตูพลิ้ว แล้วตกหล่นลงไป ใช้ transform-origin: top left และ ease-in-out timing

โค้ดตัวอย่างสมบูรณ์

<html>
<head>
  <style>
    .animated {
      background-image: url(/css/images/logo.png);
      background-repeat: no-repeat;
      background-position: left top;
      padding-top: 95px;
      margin-bottom: 60px;
      -webkit-animation-duration: 1s;
      animation-duration: 1s;
      -webkit-animation-fill-mode: both;
      animation-fill-mode: both;
    }

    @-webkit-keyframes hinge {
      0%   { -webkit-transform: rotate(0); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }
      20%, 60% { -webkit-transform: rotate(80deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }
      40%  { -webkit-transform: rotate(60deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }
      80%  { -webkit-transform: rotate(60deg) translateY(0); opacity: 1; -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }
      100% { -webkit-transform: translateY(700px); opacity: 0; }
    }
    @keyframes hinge {
      0%   { transform: rotate(0); transform-origin: top left; animation-timing-function: ease-in-out; }
      20%, 60% { transform: rotate(80deg); transform-origin: top left; animation-timing-function: ease-in-out; }
      40%  { transform: rotate(60deg); transform-origin: top left; animation-timing-function: ease-in-out; }
      80%  { transform: rotate(60deg) translateY(0); opacity: 1; transform-origin: top left; animation-timing-function: ease-in-out; }
      100% { transform: translateY(700px); opacity: 0; }
    }

    .hinge {
      -webkit-animation-name: hinge;
      animation-name: hinge;
    }
  </style>
</head>
<body>
  <div id="animated-example" class="animated hinge"></div>
  <button onclick="myFunction()">Reload page</button>
  <script>
    function myFunction() { location.reload(); }
  </script>
</body>
</html>

การวิเคราะห์ Keyframes

ขั้นตอนTransformOpacityพฤติกรรม
0%rotate(0) origin top left1เริ่มต้น แนวตั้ง
20%rotate(80deg)1พลิกเปิด 80°
40%rotate(60deg)1เด้งกลับ 60°
60%rotate(80deg)1พลิกไป 80° อีกครั้ง
80%rotate(60deg) translateY(0)1ค้างที่ 60°
100%translateY(700px)0ตกหล่นลงไปจนหาย

จุดสำคัญ

  • transform-origin: top left - จุดหมุนอยู่มุมซ้ายบน (เหมือนส 경첩ประตู)
  • ease-in-out - เร่งช้า ทำให้ดูเป็นธรรมชาติ
  • มีการ "สั่น" (20%, 40%, 60%) ก่อนตก
  • Duration 1s ค่อนข้างช้า สำหรับ dramatic effect

การใช้งานจริง

.card.removed {
  animation: hinge 1s ease-in-out forwards;
  transform-origin: top left;
}