animation-timing-function
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
animation-timing-function CSS 屿§è®¾ç½®å¨ç»å¨æ¯ä¸ªå¨æçæç»æ¶é´å
å¦ä½è¿è¡ã
å°è¯ä¸ä¸
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 #333;
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%;
}
}
"use strict";
window.addEventListener("load", () => {
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";
}
});
});
使ç¨ç®å屿§ animation 䏿¬¡æ§è®¾ç½®ææå¨ç»å±æ§é叏徿¹ä¾¿ã
è¯æ³
/* å
³é®åå¼ */
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;
/* 彿°å¼ */
animation-timing-function: cubic-bezier(0.1, 0.7, 1, 0.1);
animation-timing-function: steps(4, end);
/* 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);
/* å¤ä¸ªå¨ç» */
animation-timing-function: ease, step-start, cubic-bezier(0.1, 0.7, 1, 0.1);
/* å
¨å±å¼ */
animation-timing-function: inherit;
animation-timing-function: initial;
animation-timing-function: revert;
animation-timing-function: revert-layer;
animation-timing-function: unset;
夿³¨ï¼å½ä½ å¨ animation-* 屿§ä¸æå®å¤ä¸ªä»¥éå·åéç弿¶ï¼å®ä»¬å°æ ¹æ®å¼çæ°é以ä¸åçæ¹å¼åé
ç» animation-name 屿§ä¸æå®çå¨ç»ãæå
³æ´å¤ä¿¡æ¯ï¼è¯·åé
设置å¤ä¸ªå¨ç»å±æ§å¼ã
å¼
<easing-function>-
animation-nameç¡®å®å¨ç»å¯¹åºçç¼å¨å½æ°ãéé¶è·ï¼non-stepï¼å ³é®åå¼ï¼å¦ easeãlinearãease-in-out çï¼ä»£è¡¨äºåºå®çåç¹å¼ç䏿¬¡è´å¡å°æ²çº¿ï¼è cubic-bezier() 彿°å 许使ç¨éé¢å®ä¹å¼ãèé¶è·æ¶é´å½æ°å°è¾å ¥æ¶é´åæä¸å®æ°éç¸ççé´éï¼ç±æ¥æ°åæ¥éª¤ä½ç½®å®ä¹ã
ease-
çåäº
cubic-bezier(0.25, 0.1, 0.25, 1.0)ï¼å³é»è®¤å¼ï¼è¡¨ç¤ºå¨ç»å¨ä¸é´å éï¼å¨ç»ææ¶åéã linear-
çåäº
cubic-bezier(0.0, 0.0, 1.0, 1.0)ï¼è¡¨ç¤ºå¨ç»ä»¥åéè¿å¨ã ease-in-
çåäº
cubic-bezier(0.42, 0, 1.0, 1.0)ï¼è¡¨ç¤ºå¨ç»ä¸å¼å§è¾æ ¢ï¼éçå¨ç»å±æ§çåå鿏å éï¼ç´è³å®æã ease-out-
çåäº
cubic-bezier(0, 0, 0.58, 1.0)ï¼è¡¨ç¤ºå¨ç»ä¸å¼å§è¾å¿«ï¼éçå¨ç»çè¿è¡éæ¸åéã ease-in-out-
çåäº
cubic-bezier(0.42, 0, 0.58, 1.0)ï¼è¡¨ç¤ºå¨ç»å±æ§ä¸å¼å§ç¼æ ¢ååï¼éåå éååï¼æå忬¡åéååã cubic-bezier(p1, p2, p3, p4)-
å¼åè èªå®ä¹ç䏿¬¡è´å¡å°æ²çº¿ï¼å ¶ä¸ p1 å p3 çå¼å¿ é¡»å¨ 0 å° 1 çèå´å ã
steps(n, <jumpterm>)-
æç § n ä¸ªå®æ ¼å¨è¿æ¸¡ä¸æ¾ç¤ºå¨ç»è¿ä»£ï¼æ¯ä¸ªå®æ ¼çé¿æ¶é´æ¾ç¤ºãä¾å¦ï¼å¦æ n 为 5ï¼åæ 5 个æ¥éª¤ãå¨ç»æ¯å¦å¨ 0%ã20%ã40%ã60% å 80% 夿 20%ã40%ã60%ã80% å 100% 夿åï¼æè å¨å¨ç»ç 0% å 100% ä¹é´è®¾ç½® 5 ä¸ªå®æ ¼ï¼åææ¯å¨å æ¬ 0% å 100% çæ åµä¸è®¾ç½® 5 ä¸ªå®æ ¼ï¼å¨ 0%ã25%ã50%ã75% å 100% å¤ï¼åå³äºä½¿ç¨ä»¥ä¸è·³è·é¡¹ä¹ä¸ï¼
jump-start-
表示ä¸ä¸ªå·¦è¿ç»å½æ°ï¼å æ¤ç¬¬ä¸ä¸ªè·³è·åçå¨å¨ç»å¼å§æ¶ã
jump-end-
表示ä¸ä¸ªå³è¿ç»å½æ°ï¼å æ¤æåä¸ä¸ªè·³è·åçå¨å¨ç»ç»ææ¶ã
jump-none-
ä¸¤ç«¯é½æ²¡æè·³è·ãç¸åï¼å¨ 0% å 100% æ è®°å¤åå«åçï¼æ¯ä¸ªåçç¹çæç»æ¶é´ä¸ºæ»å¨ç»æ¶é´ç 1/nã
jump-both-
å¨ 0% å 100% æ è®°å¤åçï¼ææå°å¨å¨ç»è¿ä»£è¿ç¨ä¸æ·»å ä¸ä¸ªæ¥éª¤ã
start-
çåäº
jump-startã end-
çåäº
jump-endã step-start-
çåäº
steps(1, jump-start)ã step-end-
çåäº
steps(1, jump-end)ã
æè¿°
å¨ @keyframes è§åä¸ï¼å¯ä»¥å¨å个å
³é®å¸§ä¸æå®æ¶é´å½æ°ãå¦ææ²¡æå¨å
³é®å¸§ä¸æå® animation-timing-functionï¼å该å
³é®å¸§å°ä½¿ç¨åºç¨å¨ç»çå
ç´ ç animation-timing-function 屿§ç¸åºçå¼ã
å¨å
³é®å¸§å
ï¼animation-timing-function æ¯ä¸ä¸ª at-rule-specific æè¿°ç¬¦ï¼è䏿¯ååç屿§ãæ¶é´å¹¶æ²¡æè¢«å¨ç»åãç¸åï¼å
³é®å¸§çæ¶é´å½æ°ä¼å¨éä¸ªå±æ§çåºç¡ä¸åºç¨ï¼ä»æå®è¯¥å½æ°çå
³é®å¸§å¼å§ï¼ç´å°ä¸ä¸ä¸ªæå®è¯¥å±æ§çå
³é®å¸§ï¼æè
ç´å°å¨ç»ç»æï¼å¦ææ²¡æåç»å
³é®å¸§æå®è¯¥å±æ§ï¼ãå æ¤ï¼å¨ 100% æ to å
³é®å¸§ä¸æå®ç animation-timing-function æ°¸è¿ä¸ä¼è¢«ä½¿ç¨ã
å½¢å¼å®ä¹
| åå§å¼ | ease |
|---|---|
| éç¨å ç´ | all elements, ::before and ::after pseudo-elements |
| æ¯å¦æ¯ç»§æ¿å±æ§ | å¦ |
| 计ç®å¼ | as specified |
| å¨ç»ç±»å | Not animatable |
å½¢å¼è¯æ³
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
示ä¾
>䏿¬¡è´å¡å°ç¤ºä¾
.ease {
animation-timing-function: ease;
}
.easein {
animation-timing-function: ease-in;
}
.easeout {
animation-timing-function: ease-out;
}
.easeinout {
animation-timing-function: ease-in-out;
}
.linear {
animation-timing-function: linear;
}
.cb {
animation-timing-function: cubic-bezier(0.2, -2, 0.8, 2);
}
é¶è·å¨ç»ç¤ºä¾
.jump-start {
animation-timing-function: steps(5, jump-start);
}
.jump-end {
animation-timing-function: steps(5, jump-end);
}
.jump-none {
animation-timing-function: steps(5, jump-none);
}
.jump-both {
animation-timing-function: steps(5, jump-both);
}
.start {
animation-timing-function: steps(5, start);
}
.end {
animation-timing-function: steps(5, end);
}
.step-start {
animation-timing-function: step-start;
}
.step-end {
animation-timing-function: step-end;
}
è§è
| è§è |
|---|
| CSS Animations Level 1 > # animation-timing-function > |
æµè§å¨å ¼å®¹æ§
åè§
- ä½¿ç¨ CSS å¨ç»
<easing-function>- JavaScript
AnimationEventAPI - cubic-bezier.com
- å
¶ä»ç¸å
³çå¨ç»å±æ§ï¼
animationãanimation-compositionãanimation-delayãanimation-directionãanimation-durationãanimation-fill-modeãanimation-iteration-countãanimation-nameãanimation-timelineãanimation-play-state