animation-timing-function

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Thuộc tính animation-timing-function CSS xác định cách hoạt hình tiến triển trong suốt thời gian của mỗi chu kỳ.

Thường thuận tiện khi sử dụng thuộc tính viết tắt animation để thiết lập tất cả các thuộc tính hoạt hình cùng một lúc.

Try it

animation-timing-function: linear;
animation-timing-function: ease-in-out;
animation-timing-function: steps(5, end);
animation-timing-function: cubic-bezier(0.1, -0.6, 0.2, 0);
<section class="flex-column" id="default-example">
  <div class="animating" id="example-element"></div>
  <button id="play-pause">Play</button>
</section>
#example-element {
  animation-duration: 3s;
  animation-iteration-count: infinite;
  animation-name: slide;
  animation-play-state: paused;
  background-color: #1766aa;
  border-radius: 50%;
  border: 5px solid #333333;
  color: white;
  height: 150px;
  margin: auto;
  margin-left: 0;
  width: 150px;
}

#example-element.running {
  animation-play-state: running;
}

#play-pause {
  font-size: 2rem;
}

@keyframes slide {
  from {
    background-color: orange;
    color: black;
    margin-left: 0;
  }
  to {
    background-color: orange;
    color: black;
    margin-left: 80%;
  }
}
const el = document.getElementById("example-element");
const button = document.getElementById("play-pause");

button.addEventListener("click", () => {
  if (el.classList.contains("running")) {
    el.classList.remove("running");
    button.textContent = "Play";
  } else {
    el.classList.add("running");
    button.textContent = "Pause";
  }
});

Cú pháp

css
/* Giá trị từ khóa */
animation-timing-function: ease;
animation-timing-function: ease-in;
animation-timing-function: ease-out;
animation-timing-function: ease-in-out;
animation-timing-function: linear;
animation-timing-function: step-start;
animation-timing-function: step-end;

/* Giá trị hàm cubic-bezier() */
animation-timing-function: cubic-bezier(0.42, 0, 1, 1); /* ease-in */
animation-timing-function: cubic-bezier(0, 0, 0.58, 1); /* ease-out */
animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1); /* ease-in-out */

/* Giá trị hàm linear() */
animation-timing-function: linear(0, 0.25, 1);
animation-timing-function: linear(0 0%, 0.25 50%, 1 100%);
animation-timing-function: linear(0, 0.25 50% 75%, 1);
animation-timing-function: linear(0, 0.25 50%, 0.25 75%, 1);

/* Giá trị hàm steps() */
animation-timing-function: steps(4, jump-start);
animation-timing-function: steps(10, jump-end);
animation-timing-function: steps(20, jump-none);
animation-timing-function: steps(5, jump-both);
animation-timing-function: steps(6, start);
animation-timing-function: steps(8, end);

/* Nhiều hoạt hình */
animation-timing-function: ease, step-start, cubic-bezier(0.1, 0.7, 1, 0.1);

/* Giá trị toàn cục */
animation-timing-function: inherit;
animation-timing-function: initial;
animation-timing-function: revert;
animation-timing-function: revert-layer;
animation-timing-function: unset;

Giá trị

<easing-function>

Hàm easing tương ứng với một hoạt hình cụ thể, được xác định bởi animation-name.

Các giá trị từ khóa không phải step (ease, linear, ease-in-out, v.v.) đều đại diện cho các đường cong Bézier bậc ba với bốn điểm cố định, trong khi giá trị hàm cubic-bezier() cho phép chỉ định các giá trị không được định sẵn. Hàm easing steps() chia thời gian đầu vào thành một số khoảng thời gian bằng nhau. Tham số bao gồm số bước và vị trí bước.

linear

Tương đương với cubic-bezier(0.0, 0.0, 1.0, 1.0), hoạt hình với tốc độ đều đặn.

ease

Tương đương với cubic-bezier(0.25, 0.1, 0.25, 1.0), giá trị mặc định, tăng tốc về giữa hoạt hình, rồi chậm lại ở cuối.

ease-in

Tương đương với cubic-bezier(0.42, 0, 1.0, 1.0), bắt đầu chậm, tốc độ chuyển đổi tăng dần cho đến khi hoàn thành.

ease-out

Tương đương với cubic-bezier(0, 0, 0.58, 1.0), bắt đầu nhanh, hoạt hình chậm dần khi tiếp tục.

ease-in-out

Tương đương với cubic-bezier(0.42, 0, 0.58, 1.0), thuộc tính hoạt hình chuyển đổi chậm, tăng tốc, rồi chậm lại.

cubic-bezier(<number [0,1]> , <number> , <number [0,1]> , <number>)

Đường cong cubic-bezier do tác giả xác định, trong đó giá trị thứ nhất và thứ ba phải nằm trong khoảng từ 0 đến 1.

linear(<number> <percentage>{1,2}, …)

Hàm nội suy tuyến tính giữa các điểm dừng easing được cung cấp. Điểm dừng là cặp gồm tiến trình đầu ra và phần trăm đầu vào. Phần trăm đầu vào là tùy chọn và được suy luận nếu không được chỉ định. Nếu không có phần trăm đầu vào, điểm dừng đầu và cuối được đặt thành 0%100%, và các điểm dừng ở giữa nhận giá trị phần trăm bằng cách nội suy tuyến tính giữa các điểm gần nhất có giá trị phần trăm.

steps(<integer>, <step-position>)

Hiển thị lần lặp hoạt hình dọc theo n điểm dừng trong chuyển đổi, hiển thị mỗi điểm dừng trong khoảng thời gian bằng nhau. Ví dụ, nếu n là 5, có 5 bước. Hoạt hình dừng tạm thời tại 0%, 20%, 40%, 60% và 80%, tại 20%, 40%, 60%, 80% và 100%, hay tạo 5 điểm dừng giữa 0% và 100%, hay tạo 5 điểm dừng bao gồm cả 0% và 100% (tại 0%, 25%, 50%, 75% và 100%) phụ thuộc vào vị trí bước nào được dùng:

jump-start

Chỉ định hàm liên tục trái, sao cho lần nhảy đầu tiên xảy ra khi hoạt hình bắt đầu.

jump-end

Chỉ định hàm liên tục phải, sao cho lần nhảy cuối cùng xảy ra khi hoạt hình kết thúc. Đây là giá trị mặc định.

jump-none

Không có lần nhảy ở cả hai đầu, thực chất loại bỏ một bước trong quá trình nội suy. Thay vào đó, nó giữ ở cả điểm 0% và 100%, mỗi điểm trong 1/n thời gian.

jump-both

Bao gồm khoảng dừng ở cả điểm 0% và 100%, thực chất thêm một bước trong quá trình lặp hoạt hình.

start

Giống như jump-start.

end

Giống như jump-end.

step-start

Tương đương với steps(1, jump-start)

step-end

Tương đương với steps(1, jump-end)

Note: Khi bạn chỉ định nhiều giá trị phân tách bằng dấu phẩy trên thuộc tính animation-*, chúng được áp dụng cho các hoạt hình theo thứ tự mà animation-name xuất hiện. Xem Setting multiple animation property values để biết tình huống số lượng hoạt hình và giá trị thuộc tính animation-* không khớp nhau.

Note: animation-timing-function có hiệu ứng tương tự khi tạo CSS scroll-driven animations như đối với các hoạt hình dựa trên thời gian thông thường.

Mô tả

Các hàm easing có thể được chỉ định trên từng keyframe riêng lẻ trong quy tắc @keyframes. Nếu không có animation-timing-function được chỉ định trên một keyframe, giá trị tương ứng của animation-timing-function từ phần tử được áp dụng hoạt hình sẽ được sử dụng cho keyframe đó.

Trong một keyframe, animation-timing-function là một descriptor dành riêng cho at-rule, không phải thuộc tính có cùng tên. Thời gian không được hoạt hình. Thay vào đó, hàm easing của keyframe được áp dụng theo từng thuộc tính, từ keyframe nơi nó được chỉ định cho đến keyframe tiếp theo chỉ định thuộc tính đó, hoặc đến cuối hoạt hình nếu không có keyframe tiếp theo. Do đó, animation-timing-function được chỉ định trên keyframe 100% hoặc to sẽ không bao giờ được sử dụng.

Định nghĩa chính thức

Initial valueease
Applies toall elements, ::before and ::after pseudo-elements
Inheritedno
Computed valueas specified
Animation typeNot animatable

Cú pháp chính thức

animation-timing-function = 
<easing-function>#

<easing-function> =
<linear-easing-function> |
<cubic-bezier-easing-function> |
<step-easing-function>

<linear-easing-function> =
linear |
<linear()>

<cubic-bezier-easing-function> =
ease |
ease-in |
ease-out |
ease-in-out |
<cubic-bezier()>

<step-easing-function> =
step-start |
step-end |
<steps()>

<linear()> =
linear( [ <number> && <percentage>{0,2} ]# )

<cubic-bezier()> =
cubic-bezier( [ <number [0,1]> , <number> ]#{2} )

<steps()> =
steps( <integer> , <step-position>? )

<integer> =
<number-token>

<step-position> =
jump-start |
jump-end |
jump-none |
jump-both |
start |
end

Ví dụ

Tất cả các ví dụ trong phần này hoạt hình thuộc tính widthbackground-color của một số phần tử <div> với các giá trị animation-timing-function khác nhau. Chiều rộng được hoạt hình từ 0 đến 100%, và màu nền được hoạt hình từ lime sang magenta.

Ví dụ hàm linear

Ví dụ này minh họa hiệu ứng của các giá trị hàm easing linear() khác nhau.

Hình ảnh sau hiển thị đồ thị của tất cả các giá trị hàm linear() được sử dụng trong ví dụ này. Tiến trình đầu vào (thời gian) được vẽ trên trục x và tiến trình đầu ra trên trục y. Theo cú pháp, tiến trình đầu vào từ 0 đến 100%, và đầu ra từ 0 đến 1.

An image showing 'linear' function graphs

Lưu ý rằng đầu ra có thể đi tiến hoặc lùi.

Ví dụ Cubic-Bézier

Ví dụ này minh họa hiệu ứng của các hàm easing đường cong bézier khác nhau.

Hình ảnh sau hiển thị đồ thị của tất cả các giá trị hàm cubic bézier được sử dụng trong ví dụ này. Tiến trình đầu vào (thời gian) từ 0 đến 1 và tiến trình đầu ra từ 0 đến 1.

An image showing 'cubic-bezier' function graphs

Ví dụ Step

Ví dụ này minh họa hiệu ứng của một số giá trị hàm easing step.

Hình ảnh sau hiển thị đồ thị của tất cả các giá trị hàm step() được sử dụng trong ví dụ này. Tiến trình đầu vào (thời gian) và tiến trình đầu ra từ 0 đến 1.

image showing 'steps' function graphs

Đặc tả

Specification
CSS Animations Level 1
# animation-timing-function

Khả năng tương thích trình duyệt

Xem thêm