ä½¿ç¨ CSS å¨ç»
CSS animations 使å¾å¯ä»¥å°ä»ä¸ä¸ª CSS æ ·å¼é 置转æ¢å°å¦ä¸ä¸ª CSS æ ·å¼é ç½®ãå¨ç»å æ¬ä¸¤ä¸ªé¨åï¼æè¿°å¨ç»çæ ·å¼è§ååç¨äºæå®å¨ç»å¼å§ãç»æä»¥åä¸é´ç¹æ ·å¼çå ³é®å¸§ã
ç¸è¾äºä¼ ç»çèæ¬å®ç°å¨ç»ææ¯ï¼ä½¿ç¨ CSS å¨ç»æä¸ä¸ªä¸»è¦ä¼ç¹ï¼
- è½å¤é常容æå°å建ç®åå¨ç»ï¼ä½ çè³ä¸éè¦äºè§£ JavaScript å°±è½å建å¨ç»ã
- å¨ç»è¿è¡ææè¯å¥½ï¼çè³å¨ä½æ§è½çç³»ç»ä¸ã渲æå¼æä¼ä½¿ç¨è·³å¸§æè å ¶ä»ææ¯ä»¥ä¿è¯å¨ç»è¡¨ç°å°½å¯è½çæµç ãèä½¿ç¨ JavaScript å®ç°çå¨ç»é常表ç°ä¸ä½³ï¼é¤éç»è¿å¾å¥½ç设计ï¼ã
- 让æµè§å¨æ§å¶å¨ç»åºåï¼å 许æµè§å¨ä¼åæ§è½åææï¼å¦éä½ä½äºéèé项å¡ä¸çå¨ç»æ´æ°é¢çã
é ç½®å¨ç»
å建å¨ç»åºåï¼éè¦ä½¿ç¨ animation 屿§æå
¶å屿§ï¼è¯¥å±æ§å
许é
ç½®å¨ç»æ¶é´ãæ¶é¿ä»¥åå
¶ä»å¨ç»ç»èï¼ä½è¯¥å±æ§ä¸è½é
ç½®å¨ç»çå®é
表ç°ï¼å¨ç»çå®é
è¡¨ç°æ¯ç± @keyframes è§åå®ç°ï¼å
·ä½æ
åµåè§ä½¿ç¨ keyframes å®ä¹å¨ç»åºåå°èé¨åã
animation çå屿§æï¼
animation-delay-
设置延æ¶ï¼å³ä»å ç´ å è½½å®æä¹åå°å¨ç»åºåå¼å§æ§è¡çè¿æ®µæ¶é´ã
animation-direction-
设置å¨ç»å¨æ¯æ¬¡è¿è¡å®åæ¯ååè¿è¡è¿æ¯éæ°åå°å¼å§ä½ç½®éå¤è¿è¡ã
animation-duration-
设置å¨ç»ä¸ä¸ªå¨æçæ¶é¿ã
animation-iteration-count-
设置å¨ç»é夿¬¡æ°ï¼å¯ä»¥æå® infinite æ 鿬¡éå¤å¨ç»
animation-name-
æå®ç±
@keyframesæè¿°çå ³é®å¸§åç§°ã animation-play-state-
å 许æå忢å¤å¨ç»ã
animation-timing-function-
设置å¨ç»é度ï¼å³éè¿å»ºç«å é度æ²çº¿ï¼è®¾ç½®å¨ç»å¨å ³é®å¸§ä¹é´æ¯å¦ä½ååã
animation-fill-mode-
æå®å¨ç»æ§è¡ååå¦ä½ä¸ºç®æ å ç´ åºç¨æ ·å¼ã
ä½¿ç¨ keyframes å®ä¹å¨ç»åºå
䏿¦å®æå¨ç»çæ¶é´è®¾ç½®ï¼æ¥ä¸æ¥å°±éè¦å®ä¹å¨ç»ç表ç°ãéè¿ä½¿ç¨@keyframes建ç«ä¸¤ä¸ªæä¸¤ä¸ªä»¥ä¸å
³é®å¸§æ¥å®ç°ãæ¯ä¸ä¸ªå
³é®å¸§é½æè¿°äºå¨ç»å
ç´ å¨ç»å®çæ¶é´ç¹ä¸åºè¯¥å¦ä½æ¸²æã
å 为å¨ç»çæ¶é´è®¾ç½®æ¯éè¿ CSS æ ·å¼å®ä¹çï¼å
³é®å¸§ä½¿ç¨ <percentage> æ¥æå®å¨ç»åççæ¶é´ç¹ã0% 表示å¨ç»çç¬¬ä¸æ¶å»ï¼100% 表示å¨ç»çæç»æ¶å»ãå 为è¿ä¸¤ä¸ªæ¶é´ç¹ååéè¦ï¼æä»¥è¿æç¹æ®çå«åï¼from å toãè¿ä¸¤ä¸ªé½æ¯å¯éçï¼è¥ from/0% æ to/100% æªæå®ï¼åæµè§å¨ä½¿ç¨è®¡ç®å¼å¼å§æç»æå¨ç»ã
ä¹å¯å å«é¢å¤å¯éçå ³é®å¸§ï¼æè¿°å¨ç»å¼å§åç»æä¹é´çç¶æã
示ä¾
夿³¨ï¼è¿éçç¤ºä¾æ²¡æå¨ CSS å¨ç»å±æ§ä¸ä½¿ç¨ä»»ä½åç¼ï¼Webkit å
æ ¸æµè§å¨æè
æ©æçæ¬æµè§å¨å¯è½éè¦åç¼ï¼ä¸é¢çå®ä¾å
å«äº-webkit-åç¼ã
ææ¬æ»è¿æµè§å¨çªå£
该ä¾ä¸<p> å
ç´ ç±æµè§å¨çªå£å³è¾¹æ»è³å·¦è¾¹
p {
animation-duration: 3s;
animation-name: slidein;
}
@keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
animation-duration 屿§æå® <p> ä¸çå¨ç»ä»å¼å§å°ç»æèè´¹ 3 ç§ï¼@keyframes æå®ä½¿ç¨åå为âslideinâçå
³é®å¸§ã
妿叿å¨ä¸æ¯æ CSS å¨ç»çæµè§å¨ä¸ä½¿ç¨èªå®ä¹æ ·å¼ï¼åºè¯¥å°å ¶åå¨è¿éï¼ç¶èï¼å¨è¯¥ä¾ä¸ï¼æä»¬ä¸éè¦é¤å¨ç»ææä»¥å¤çä»»ä½èªå®ä¹æ ·å¼ã
å
³é®å¸§æ¯ç¨ @keyframes å®ä¹çã该ä¾ä¸ï¼æä»¬åªä½¿ç¨äºä¸¤ä¸ªå
³é®å¸§ã第ä¸ä¸ªåºç°å¨ 0%ï¼æ¤ä¾ä¸ä½¿ç¨äºå«å fromï¼å¤ï¼æ¤å¤å
ç´ ç左边è·ä¸º 100%ï¼å³ä½äºå®¹å¨çå³è¾¹çï¼ï¼å®½ä¸º 300%ï¼å³å®¹å¨å®½åº¦ç 3 åï¼ï¼ä½¿å¾å¨å¨ç»ç第ä¸å¸§ä¸æ é¢ä½äºæµè§å¨çªå£å³è¾¹çä¹å¤ã
第äºå¸§åºç°å¨ 100%ï¼æ¤ä¾ä¸ä½¿ç¨äºå«å toï¼ãå
ç´ ç左边è·è®¾ä¸º 0%ï¼å®½è®¾ä¸º 100%ï¼ä½¿å¾å¨ç»ç»ææ¶å
ç´ ä¸çªå£å·¦è¾¹ç对é½ã
<p>
The Caterpillar and Alice looked at each other for some time in silence: at
last the Caterpillar took the hookah out of its mouth, and addressed her in a
languid, sleepy voice.
</p>
å¢å å ³é®å¸§
让æä»¬ç»ä¸é¢ç示ä¾ä¸æ·»å ä¸ä¸ªå ³é®å¸§ï¼æ¯å¦æ é¢çåå·å å大ç¶åæ¢å¤æ£å¸¸ï¼æ·»å è¿ä¸ªå ³é®å¸§ååç®åï¼
75% {
font-size: 300%;
margin-left: 25%;
width: 150%;
}
å¨å¨ç»åºåæ§è¡å° 75% çæ¶åï¼æ é¢å ç´ ç左边è·ä¸º 25%ï¼å®½åº¦ä¸º 150%ã
éå¤å¨ç»
animation-iteration-countç¨ä»¥æå®å¨ç»éå¤ç次æ°ï¼ä»
ä»
使ç¨è¯¥å±æ§å°±è½ä½¿å¨ç»é夿æ¾ãå¨è¯¥ä¾ä¸ï¼è®¾è¯¥å±æ§ä¸ºinfinite以使å¨ç»æ ééå¤
p {
animation-duration: 3s;
animation-name: slidein;
animation-iteration-count: infinite;
}
æ¥åè¿å¨
ä¸é¢å®ç°äºå¨ç»çé夿æ¾ï¼ä½æ¯æ¯æ¬¡å¨ç»å¼å§æ¶æ»è·³åå¼å§ä½ç½®æ¾å¾å¾æªå¼ãæä»¬çæ£æ³è¦çæ¯æ 颿¥åæ»å¨ï¼è¿æ¶åªéè¦è®¾ç½®animation-direction屿§ä¸ºalternateã
p {
animation-duration: 3s;
animation-name: slidein;
animation-iteration-count: infinite;
animation-direction: alternate;
}
使ç¨å¨ç»äºä»¶
å©ç¨å¨ç»äºä»¶å¯ä»¥æ´å¥½çæ§å¶å¨ç»åä¿¡æ¯ãè¿äºäºä»¶ç± AnimationEvent对象表示ï¼å¯æ¢æµå¨ç»ä½æ¶å¼å§ç»æåå¼å§æ°ç循ç¯ãæ¯ä¸ªäºä»¶å
æ¬å¨ç»åççæ¶é´å触åäºä»¶çå¨ç»åç§°ãæä»¬å°ä¿®æ¹æ»å¨ææ¬ç¤ºä¾ï¼è¾åºæ¯ä¸ªå¨ç»äºä»¶åºç°æ¶çä¿¡æ¯ã
.slidein {
-moz-animation-duration: 3s;
-webkit-animation-duration: 3s;
animation-duration: 3s;
-moz-animation-name: slidein;
-webkit-animation-name: slidein;
animation-name: slidein;
-moz-animation-iteration-count: 3;
-webkit-animation-iteration-count: 3;
animation-iteration-count: 3;
-moz-animation-direction: alternate;
-webkit-animation-direction: alternate;
animation-direction: alternate;
}
@-moz-keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
@-webkit-keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
@keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
æ·»å å¨ç»äºä»¶çå¬å¨
æä»¬ä½¿ç¨ JavaScript 代ç ç嬿æä¸ç§å¯è½çå¨ç»äºä»¶ï¼setup() æ¹æ³è®¾ç½®äºä»¶çå¬å¨ï¼å½ææ¡£ç¬¬ä¸æ¬¡å è½½å®ææ¶æ§è¡è¯¥æ¹æ³ã
var e = document.getElementById("watchme");
e.addEventListener("animationstart", listener, false);
e.addEventListener("animationend", listener, false);
e.addEventListener("animationiteration", listener, false);
e.className = "slidein";
以䏿¯é常æ åç代ç åæ³ï¼setup() æå设置å¨ç»å
ç´ ç class 为 slideinï¼å¯å¨å¨ç»ã为ä»ä¹è¿æ ·åï¼å 为 animationstart äºä»¶å¨å¨ç»ä¸å¼å§æ¶å°±è¢«è§¦åï¼å¨æä»¬ç示ä¾ä¸ï¼è¯¥äºä»¶å¨æä»¬çä»£ç æ§è¡å就被触åï¼æä»¥æä»¬èªå·±éè¿è®¾ç½®å
ç´ ç class æ¥å¯å¨å¨ç»ã
æ¥æ¶äºä»¶
äºä»¶ä¼ éç»listener()彿°ï¼ä»£ç å¦ä¸æç¤º
function listener(e) {
var l = document.createElement("li");
switch (e.type) {
case "animationstart":
l.innerHTML = "Started: elapsed time is " + e.elapsedTime;
break;
case "animationend":
l.innerHTML = "Ended: elapsed time is " + e.elapsedTime;
break;
case "animationiteration":
l.innerHTML = "New loop started at time " + e.elapsedTime;
break;
}
document.getElementById("output").appendChild(l);
}
è¿æ®µä»£ç åæ ·é常ç®åï¼ç®åå°éè¿event.typeæ¥å¤æåççæ¯ä½ç§äºä»¶ï¼ç¶åæ·»å 对åºç注解å°<ul>ä¸ã
è¾åºç»æå¦ä¸æç¤ºï¼
- Started: elapsed time is 0
- New loop started at time 3.01200008392334
- New loop started at time 6.00600004196167
- Ended: elapsed time is 9.234000205993652
注æä»¥ä¸æ¶é´é常æ¥è¿é¢ææ¶é´ï¼ä½ä¸æ¯å®å
¨ç¸çãä¹è¦æ³¨æå¨æåä¸ä¸ªå¨æå®æåï¼ä¸ä¼è§¦åanimationiterationäºä»¶ï¼è触åanimationendäºä»¶ã
HTML 代ç
ä¸é¢æ¯ç¤ºä¾ä¸çç¨å°ç HTML 代ç ï¼
<body>
<h1 id="watchme">Watch me move</h1>
<p>
This example shows how to use CSS animations to make
<code>h1</code> elements move across the page.
</p>
<p>
In addition, we output some text each time an animation event fires, so you
can see them in action.
</p>
<ul id="output"></ul>
</body>