Thuộc tính transitionTimingFunction xác định đường cong tốc độ (easing) của hiệu ứng transition. Giá trị phổ biến: ease, linear, ease-in, ease-out, ease-in-out, cubic-bezier(), steps().
Ví dụ minh họa
Mã sau đặt timing function = ease-in cho div2 khi nhấn nút:
<!DOCTYPE html>
<html>
<head>
<style>
#div1 {
position: relative;
margin: 10px;
height: 300px;
width: 400px;
padding: 20px;
border: 2px solid blue;
}
#div2 {
padding: 80px;
position: absolute;
border: 2px solid blue;
background-color: yellow;
transform: rotateY(45deg);
transition: all 5s;
}
#div2:hover {
background-color: orange;
width: 50px;
height: 50px;
padding: 100px;
border-radius: 50px;
}
</style>
</head>
<body>
<p>Di chuột qua DIV2</p>
<button onclick="setTimingFunction()">Đặt Timing Function</button>
<div id="div1">DIV1
<div id="div2">DIV2</div>
</div>
<script>
function setTimingFunction() {
document.getElementById("div2").style.transitionTimingFunction = "ease-in";
/* Chậm lúc đầu, nhanh dần về cuối */
}
</script>
</body>
</html>
Các hàm timing phổ biến
| Giá trị | Đặc điểm | Phù hợp cho |
|---|---|---|
ease | Chậm đầu, nhanh giữa, chậm cuối (mặc định) | UI chung, tự nhiên |
linear | Tốc độ đều | Loading bar, quay liên tục |
ease-in | Chậm đầu, nhanh dần | Phần tử xuất hiện (enter) |
ease-out | Nhanh đầu, chậm dần | Phần tử biến mất (exit) |
ease-in-out | Chậm đầu, nhanh giữa, chậm cuối | Chuyển cảnh, modal |
cubic-bezier(n,n,n,n) | Tùy chỉnh đường cong Bezier | Hiệu ứng đặc thù, brand motion |
steps(n, start|end) | Nhảy theo bước (không mượt) | Sprite animation, tick clock |
Mẹo: Dùng cubic-bezier.com để thiết kế easing tùy chỉnh. Kết hợp với transitionDelay để tạo chuỗi animation phức tạp.