เอฟเฟกต์ 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
| ขั้นตอน | Transform | Opacity | พฤติกรรม |
|---|---|---|---|
| 0% | rotate(0) origin top left | 1 | เริ่มต้น แนวตั้ง |
| 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;
}