ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã«ãããJavaScript ã§ã¢ãã¡ã¼ã·ã§ã³ãæ§ç¯ããããåçãå¶å¾¡ããããããã¨ãã§ãã¾ãããã®è¨äºã§ã¯ããµããã®å½ã®ã¢ãªã¹ããå©ç¨ããæ¥½ãããã¢ã¨ãã¥ã¼ããªã¢ã«ã§æ£ããå©ç¨æ¹æ³ã説æãã¾ãã
ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã¨ã®åºä¼ãã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã¯ããã©ã¦ã¶ã¼å
ã®ã¢ãã¡ã¼ã·ã§ã³ã¨ã³ã¸ã³ãéçºè
ã«å
¬éããJavaScript ã§æä½ã§ããããã«ãã¾ãããã® API 㯠CSS ã¢ãã¡ã¼ã·ã§ã³ã¨ CSS ãã©ã³ã¸ã·ã§ã³ã®ä¸¡æ¹ã®å®è£
åºç¤ã¨ãªãããã«è¨è¨ããã¦ãããå°æ¥ã®ã¢ãã¡ã¼ã·ã§ã³å¹æã¸ã®æãéããç¶æ
ã«ãã¦ãã¾ããããã¯ãããã¯ãå¼·å¶ãWindow.requestAnimationFrame()
ãªãã§ããã©ã¦ã¶ã¼ã«èªåèªèº«ã§å
鍿é©åãããããã¦ã§ãä¸ã§ã¢ãã¡ã¼ã·ã§ã³ããããã®ã»ã¨ãã©ã®ããã©ã¼ãã³ã¹ã®é«ãæ¹æ³ã® 1 ã¤ã§ãã
ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã使ãã¨ãã¤ã³ã¿ã©ã¯ãã£ããªã¢ãã¡ã¼ã·ã§ã³ãã¹ã¿ã¤ã«ã·ã¼ããã JavaScript ã«ç§»ãã表示ã¨åä½ãåé¢ãããã¨ãã§ãã¾ããåçæ¹åãå¶å¾¡ããããã«ãCSS ããããã£ãæ¸ããããè¦ç´ ã«ã¯ã©ã¹ãã¹ã³ã¼ããããã¨ãã£ããDOM ãé ·ä½¿ããææ³ã«é ¼ãå¿ è¦ã¯ãªããªãã¾ãããã¾ããç´ç²ãªå®£è¨åã® CSS ã¨ã¯ç°ãªããJavaScript ã§ã¯ããããã£ããåçæéã¾ã§åçã«å¤ãè¨å®ãããã¨ãã§ãã¾ããã«ã¹ã¿ã ã¢ãã¡ã¼ã·ã§ã³ã©ã¤ãã©ãªã¼ã使ãããã対話ããã¢ãã¡ã¼ã·ã§ã³ã使ãããããã®ã«ãã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã¯æé©ããããã¾ãããä½ãã§ãããè¦ã¦ã¿ã¾ãããï¼
ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ãå©ç¨ã㦠CSS ã¢ãã¡ã¼ã·ã§ã³ãæ§ç¯ããã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ãå¦ç¿ããããã®ãã身è¿ãªææ³ã¯ãå¤ãã®ã¦ã§ãéçºè ã以åã«ä½¿ç¨ãããã¨ã®ãã CSS ã¢ãã¡ã¼ã·ã§ã³ããå§ãããã¨ã§ããCSS ã¢ãã¡ã¼ã·ã§ã³ã«ã¯é¦´æã¿ã®ããæ§æãããããã®ãããã¢ç¨ã«ãã¾ãåè§£ãããã¨ãã§ãã¾ãã
CSS ãã¼ã¸ã§ã³ã¢ãªã¹ããããã®ç©´ããè½ã¡ã¦ã¯ã³ãã¼ã©ã³ãã«å°ãããæ§åã示ãã CSS ã§æ¸ããã¦ãã転ããè½ã¡ãã¢ãã¡ã¼ã·ã§ã³ã§ãï¼å®å ¨ãª Codepen ã®ã³ã¼ããåç §ãã¦ãã ããï¼ã
èæ¯ãç§»åããªãããã¢ãªã¹ãå転ããå転ããã®ãªãã»ããã§è²ãå¤åãããã¨ã«æ³¨ç®ãã¦ãã ããããã®ãã¥ã¼ããªã¢ã«ã§ã¯ãã¢ãªã¹ã®ã¿ã«ç¦ç¹ãå½ã¦ã¾ããã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ãå¶å¾¡ããç°¡å㪠CSS ã¯æ¬¡ã®ã¨ããã§ãã
#alice {
animation: aliceTumbling infinite 3s linear;
}
@keyframes aliceTumbling {
0% {
color: #000;
transform: rotate(0) translate3D(-50%, -50%, 0);
}
30% {
color: #431236;
}
100% {
color: #000;
transform: rotate(360deg) translate3D(-50%, -50%, 0);
}
}
ããã«ãã£ã¦ãã¢ãªã¹ã®è²ã¨ãã©ã³ã¹ãã©ã¼ã å転ã 3 ç§éã«ããã£ã¦ä¸å®ã«ï¼ç·å½¢ã§ï¼å¤åãããããç¡éã«ã«ã¼ããã¾ãã@keyframes ãããã¯ã§ãåã«ã¼ãã® 30%ï¼ç´ 0.9 ç§ï¼ã§ã¢ãªã¹ã®è²ãé»ããæ¿ãã¯ã¤ã³è²ã«å¤ãããã«ã¼ããçµããã¨ãã«ãã¨ã«æ»ããã¨ãåããã¾ãã
JavaScript ã¸ã®ç§»è¡æ¬¡ã«ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ãå©ç¨ãã¦åãã¢ãã¡ã¼ã·ã§ã³ã使ãã¦ã¿ã¾ãããã
ãã¼ãã¬ã¼ã ã®è¡¨ç¾æåã«å¿ è¦ãªãã¨ã¯ãCSS ã® @keyframes ãããã¯ã«å¯¾å¿ãã Keyframe ãªãã¸ã§ã¯ã ã使ãããã¨ã§ãã
const aliceTumbling = [
{ transform: "rotate(0) translate3D(-50%, -50%, 0)", color: "#000" },
{ color: "#431236", offset: 0.3 },
{ transform: "rotate(360deg) translate3D(-50%, -50%, 0)", color: "#000" },
];
ããã§ã¯ãè¤æ°ã®ãªãã¸ã§ã¯ããå«ãé åã使ç¨ãã¦ãã¾ããããããã®ãªãã¸ã§ã¯ãã¯å ã® CSS ã®ãã¼ã表ãã¾ããããããCSS ã¨ã¯ç°ãªããã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã¯åãã¼ãã¢ãã¡ã¼ã·ã§ã³ã«æ²¿ã£ã¦ç¾ãããã¼ã»ã³ãå¤ãæç¤ºçã«æç¤ºããå¿ è¦ã¯ããã¾ãããä¸ãããã¼ã®æ°ã«å¿ãã¦ãã¢ãã¡ã¼ã·ã§ã³ãèªåçã«çåå²ããã¾ããã¤ã¾ãã3 ã¤ã®ãã¼ãæã¤ Keyframe ãªãã¸ã§ã¯ãã¯ãç¹ã«æå®ããªãéããã¢ãã¡ã¼ã·ã§ã³ã®åã«ã¼ãã® 50% ã§ä¸å¤®ã®ãã¼ãåçããã¨ãããã¨ã§ãã
ãã¼ã®ãªãã»ãããä»ã®ãã¼ããæç¤ºçã«è¨å®ããå ´åã¯ãã«ã³ãã§ CSS ãã¼ã®å®£è¨ã¨åºåã£ããªãã»ãããç´æ¥ãªãã¸ã§ã¯ãã«æå®ã§ãã¾ããä¸è¨ã®ä¾ã§ã¯ãè²ã®å¤åã«å¯¾ãã¦ã¢ãªã¹ã®è²ã 30%ï¼50% ã§ã¯ãªãï¼ã§å¤åããããã« offset: 0.3
ãæå®ãã¦ãã¾ãã
å°ãªãã¨ã 2 ã¤ã®ãã¼ãã¬ã¼ã ï¼ã¢ãã¡ã¼ã·ã§ã³ã·ã¼ã±ã³ã¹ã®éå§ç¶æ
ã»çµäºç¶æ
ã® 2 ã¤ã示ãï¼ãæå®ããå¿
è¦ãããã¾ãããã©ã¦ã¶ã¼ã«ãã£ã¦ã¯ããã¼ãã¬ã¼ã ãªã¹ãã®é
ç®ã 1 ã¤ãããªãå ´åãæ´æ°ãããã¾ã§ Element.animate()
ã§ NotSupportedError
DOMException
ãçºçãããã¨ãããã¾ãã
ã¨ããå ·åã«ããã¼ã«ãªãã»ãããæå®ããªãéãããã¼ã¯æ¢å®ã§çééã«é ç½®ããã¾ãã便å©ã§ãããï¼
ã¿ã¤ãã³ã°ããããã£ã®è¡¨ç¾ã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã®å¤ã«å¯¾å¿ããã¿ã¤ãã³ã°ããããã£ã®ãªãã¸ã§ã¯ãã使ããå¿ è¦ãããã¾ãã
const aliceTiming = {
duration: 3000,
iterations: Infinity,
};
CSS ã«ãããåçã®å¤ã®è¡¨ãæ¹ã¨ã¯ç°ãªãå½¢ã§è¡¨ç¾ããã¦ãããã¨ã«ãæ°ã¥ãã§ãããã
setTimeout()
ã Window.requestAnimationFrame()
ã¨åãããã«ãã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã¯ããªç§ã§ããå¤ãåãã¾ãããiteration-count
ã§ã¯ãªã iterations
ã¨ãããã¨ã§ããã¡ã¢: CSS ã¢ãã¡ã¼ã·ã§ã³ã§ä½¿ç¨ãããç¨èªã¨ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ã§å©ç¨ãããç¨èªã¨ã§ã¯ããã¤ãå°ããªéããããã¾ããä¾ãã°ãã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ã¯ "infinite"
ã¨ããæååãå©ç¨ããªã代ããã« JavaScript ã®äºç´èªã§ãã Infinity
ãå©ç¨ãã¾ããããã¦ã timing-function
ã®ä»£ããã« easing
ãå©ç¨ãã¾ããæ¢å®ã® animation-timing-function ãç°¡å㪠ease
ã§ãã CSS ã¢ãã¡ã¼ã·ã§ã³ã¨ã¯ç°ãªããWeb Animation API ã§ã¯ããã©ã«ãã®ã¤ã¼ã¸ã³ã°ã¯ linear
(ç·å½¢)ã§ãããããããã§ã¯ã¤ã¼ã¸ã³ã°å¤ããªã¹ãã«ãã¦ãã¾ããã
次㯠Element.animate()
ã¡ã½ãããå©ç¨ãã¦ä»ã¾ã§ã® 2 ã¤ã®è¦ç´ ãã¾ã¨ãã¾ãã
document.getElementById("alice").animate(aliceTumbling, aliceTiming);
ã¢ãã¡ã¼ã·ã§ã³ã®åçãéå§ããã¾ãï¼Codepen ã®å®æãã¼ã¸ã§ã³ãåç §ãã¦ãã ããï¼ã
animate()
ã¡ã½ããã¯ãCSS ã§ã¢ãã¡ã¼ã·ã§ã³ã§ãã DOM è¦ç´ ã«å¯¾ãã¦å¼ã³åºããã¨ãã§ãã¾ããããã¦ãããã¯ããã¤ãã®æ¹æ³ã§æ¸ããã¨ãåºæ¥ã¾ãããã¼ãã¬ã¼ã ã¨ã¿ã¤ãã³ã°ããããã£ã使ãã代ããã«ã次ã®ããã«ç´æ¥æ¸¡ããã¨ãåºæ¥ã¾ãã
document.getElementById("alice").animate(
[
{ transform: "rotate(0) translate3D(-50%, -50%, 0)", color: "#000" },
{ color: "#431236", offset: 0.3 },
{ transform: "rotate(360deg) translate3D(-50%, -50%, 0)", color: "#000" },
],
{
duration: 3000,
iterations: Infinity,
},
);
ããã«ãã¢ãã¡ã¼ã·ã§ã³ã®ééæéã®ã¿ãæå®ããç¹°ãè¿ããªãã¢ãã¡ã¼ã·ã§ã³ãæå®ããå ´åãããªç§ã ããæå®ãããã¨ãã§ãã¾ãï¼æ¢å®ã§ã¯ã¢ãã¡ã¼ã·ã§ã³ã 1 åã ãå®è¡ãã¾ãï¼ã
document.getElementById("alice").animate(
[
{ transform: "rotate(0) translate3D(-50%, -50%, 0)", color: "#000" },
{ color: "#431236", offset: 0.3 },
{ transform: "rotate(360deg) translate3D(-50%, -50%, 0)", color: "#000" },
],
3000,
);
play(), pause(), reverse(), updatePlaybackRate() ãç¨ããåçå¶å¾¡
ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã使ç¨ã㦠CSS ã¢ãã¡ã¼ã·ã§ã³ã使ãããã¨ãå¯è½ã§ãããAPI ãæ¬å½ã«å½¹ç«ã¤æã¯ã¢ãã¡ã¼ã·ã§ã³ã®åçãå¶å¾¡ããã¨ãã§ããã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã¯ãåçãå¶å¾¡ããããã®ä¾¿å©ãªããã¤ãã®ã¡ã½ãããæä¾ãã¦ãã¾ããã¢ãªã¹ãæ¡å¤§/縮å°ããã²ã¼ã ã§ãã¢ãã¡ã¼ã·ã§ã³ã®ä¸æåæ¢ã¨åçãè¦ã¦ã¿ã¾ãããï¼Codepen ã®å®å ¨ãªã³ã¼ããã覧ãã ããï¼ã
ãã®ã²ã¼ã ã§ã¯ãã¢ãªã¹ã¯å°ãããªã£ãã大ãããªã£ããããã¢ãã¡ã¼ã·ã§ã³ããããããã«ã¨ã«ããã±ã¼ãã§å¶å¾¡ãã¾ããã©ã¡ãã«ãç¬èªã®ã¢ãã¡ã¼ã·ã§ã³ãããã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ã®ä¸æåæ¢ã¨åçã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã«ã¤ãã¦ã¯å¾ã§è©³ãã説æãã¾ããã¾ãã¯ã«ããã±ã¼ãã®ã¢ãã¡ã¼ã·ã§ã³ãè¦ã¦ã¿ã¾ãããã
const nommingCake = document
.getElementById("eat-me_sprite")
.animate(
[{ transform: "translateY(0)" }, { transform: "translateY(-80%)" }],
{
fill: "forwards",
easing: "steps(4, end)",
duration: aliceChange.effect.getComputedTiming().duration / 2,
},
);
Element.animate()
ã¡ã½ããã¯ãå¼ã³åºãããç´å¾ã«å®è¡ããã¾ããã¦ã¼ã¶ã¼ãã¯ãªãã¯ããåã«ã±ã¼ããé£ã¹ãããªãããã«ã次ã®ããã«å®ç¾©ããã Animation.pause()
ãããã«å¼ã³åºãã¾ãã
Animation.play()
ã¡ã½ãããç¨ãã¦æºååºæ¥ãããã¤ã§ãã¢ãã¡ã¼ã·ã§ã³ãå®è¡ã§ãã¾ãã
å ·ä½çã«ã¯ãã«ããã±ã¼ããé£ã¹ãããã«ã¤ãã¦ãã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã«ãªã³ã¯ãã¦ã¢ãªã¹ã大ãããªãããã«ãã¾ãã
const growAlice = () => {
// Play Alice's animation.
aliceChange.play();
// Play the cake's animation.
nommingCake.play();
};
ã¦ã¼ã¶ã¼ããã¦ã¹ãæ¼ããã¾ã¾ã«ããããæã§ã¿ããç»é¢ä¸ã®ã±ã¼ããæ¼ãã¨ãgrowAlice
ãå¼ã³åºãã¦ã¢ãã¡ã¼ã·ã§ã³ãåçã§ããããã«ãã¾ããã
cake.addEventListener("mousedown", growAlice, false);
cake.addEventListener("touchstart", growAlice, false);
ãã®ä»ã®ä¾¿å©ãªã¡ã½ãã
䏿忢ã¨åçã«å ãã¦ã次ã®ã¢ãã¡ã¼ã·ã§ã³ã¡ã½ãããå©ç¨ãããã¨ãåºæ¥ã¾ãã
Animation.finish()
ã¯ã¢ãã¡ã¼ã·ã§ã³ã®æå¾ã¾ã§ã¹ããããã¾ããAnimation.cancel()
ã¯ã¢ãã¡ã¼ã·ã§ã³ã䏿¢ãããã®å¹æãåé¤ãã¾ããAnimation.reverse()
ãå®è¡ãã㨠(Animation.playbackRate
ã«è² æ°ãè¨å®ããã¢ãã¡ã¼ã·ã§ã³ã®åçæ¹åãéæ¹åã«ãã¾ããæåã« playbackRate
ãè¦ã¦ã¿ã¾ããããplaybackRate ãåºã«ããã¨ã¯ã¢ãã¡ã¼ã·ã§ã³ãéã«å®è¡ããã¾ããã¢ãªã¹ãããã«ãã飲ãã¨å½¼å¥³ã¯å°ãããªãã¾ããããã¯ãããã«ã彼女ã®ã¢ãã¡ã¼ã·ã§ã³ã® playbackRate ã 1 ãã -1 ã«å¤æ´ããããã§ãã
const shrinkAlice = () => {
aliceChange.playbackRate = -1;
aliceChange.play();
};
bottle.addEventListener("mousedown", shrinkAlice, false);
bottle.addEventListener("touchstart", shrinkAlice, false);
é¡ã®å½ã®ã¢ãªã¹ã§ã¯ãã¢ãªã¹ã¯èµ°ãç¶ããªããã°ãªããªãä¸çã«ç§»åãã¾ããã¬ããã¯ã¤ã¼ã³ã®ã¬ã¼ã¹ã®ä¾ã§ã¯ãã¢ãªã¹ã¨ã¬ããã¯ã¤ã¼ã³ãæå®ã®ä½ç½®ã«ã¨ã©ã¾ã£ã¦ãã¾ãï¼Codepen ã® å®å ¨ãªã³ã¼ããåç §ãã¦ãã ããï¼ã
å°ããªåã©ãã¯ç²ããããã®ã§ãããã¡ãã®ãã§ã¹ã®é§ã¨éã£ã¦ãã¢ãªã¹ã¯å¸¸ã«æ¸éãã¦ãã¾ããããã¯ã¢ãã¡ã¼ã·ã§ã³ã® playbackRate
ãæ¸å°ããããã¨ã§å®ç¾ãã¾ããupdatePlaybackRate()
ã使ç¨ãããã¨ã¨ãplaybackRate ãç´æ¥è¨å®ãããã¨ãªããã¹ã ã¼ãºã«æ´æ°ãããã¨ãã§ãã¾ãã
setInterval(() => {
// Make sure the playback rate never falls below .4
if (redQueen_alice.playbackRate > 0.4) {
redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * 0.9);
}
}, 3000);
ããããã¯ãªãã¯ã¾ãã¯ã¿ãããã¦å½¼å¥³ããå±ã¾ãã¨ãplaybackRate ãä¹ç®ãã¦ããã®ã§ã¹ãã¼ãã¢ãããã¾ãã
const goFaster = () => {
redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * 1.1);
};
document.addEventListener("click", goFaster);
document.addEventListener("touchstart", goFaster);
ã¾ããèæ¯è¦ç´ ã«ã¯ã¯ãªãã¯ã¾ãã¯ã¿ããããã¨ãã«å½±é¿ãåãã playbackRate
ãè¨å®ãã¦ãã¾ããã¢ãªã¹ã¨ã¬ããã¯ã¤ã¼ã³ã 2 åæ©ãèµ°ããããã©ããªãã¨æãã¾ããï¼é度ãè½ã¨ãã¨ã©ããªãã¨æãã¾ããï¼
è¦ç´ ãã¢ãã¡ã¼ã·ã§ã³ãããã¨ããã¢ãã¡ã¼ã·ã§ã³ãå®äºããå¾ã«ãæçµçãªç¶æ
ãç¶æããããã¨ãããããã¾ãããã®ããã«ãã¢ãã¡ã¼ã·ã§ã³ã® fill ã¢ã¼ãã forwards
ã«è¨å®ããã¨ããæ¹æ³ãã¨ãã©ã使ããã¾ãããããã2 ã¤ã®çç±ãããã¢ãã¡ã¼ã·ã§ã³ã®å¹æãç¡æéã«ç¶æããããã« fill ã¢ã¼ãã使ç¨ãããã¨ã¯æ¨å¥¨ããã¾ããã
ããè¯ãæ¹æ³ã¯ãAnimation.commitStyles()
ã¡ã½ããã使ããã¨ã§ããããã¯ãã®ã¢ãã¡ã¼ã·ã§ã³ã®ç¾å¨ã®ã¹ã¿ã¤ã«ãã対象è¦ç´ ã® style
屿§ã«æ¸ãè¾¼ãã®ã§ããã®å¾ã¯é常ã«ã¹ã¿ã¤ã«è¨å®ããªãããã¨ãã§ãã¾ãã
åãè¦ç´ ã«å¤æ°ã®ã¢ãã¡ã¼ã·ã§ã³ãçºçããããã¨ãå¯è½ã§ããããããä¸å®ã§ããå ´åï¼ã¤ã¾ãåæ¹æºäºï¼ãã¢ãã¡ã¼ã·ã§ã³ãªã¹ãã巨大ã«ãªããã¡ã¢ãªã¼ãªã¼ã¯ãçºçããå¯è½æ§ãããã¾ãããã®ãããã©ã¦ã¶ã¼ã¯ãæ°ããã¢ãã¡ã¼ã·ã§ã³ã«ç½®ãæãã£ãå¾ãéçºè ãæç¤ºçã«ã¢ãã¡ã¼ã·ã§ã³ãæ®ãããã«æå®ããªãéããæºäºããã¢ãã¡ã¼ã·ã§ã³ãèªåçã«åé¤ãã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ã¯ã以ä¸ããã¹ã¦çã®å ´åã«åé¤ããã¾ãã
fill
ã¯åæ¹åçã§ããã° forwards
ãéåçã®å ´å㯠backwards
ã両æ¹ã®å ´å㯠both
ã§ãï¼ãfill
ã®ãããã¾ã æå¹ã§ãããã¨ã«æ³¨æãã¦ãã ãããï¼DocumentTimeline
ã§ã¯å¸¸ã«çã§ããscroll-timeline
ã®ãããªã¿ã¤ã ã©ã¤ã³ã¯éæ¹åã«åä½ãããã¨ãããã¾ããï¼AnimationEffect
ã®ã¹ã¿ã¤ã«è¨å®ããã¹ã¦ãä¸è¨ã®æ¡ä»¶ããã¹ã¦æºããå¥ã®ã¢ãã¡ã¼ã·ã§ã³ã«ãã£ã¦ä¸æ¸ãããã¦ãããï¼é常ã2 種é¡ã®ã¢ãã¡ã¼ã·ã§ã³ãåãè¦ç´ ã®åãã¹ã¿ã¤ã«ããããã£ãè¨å®ããå ´åãæå¾ã«ä½æãããã¢ãã¡ã¼ã·ã§ã³ãä»ã®ã¢ãã¡ã¼ã·ã§ã³ã䏿¸ããã¾ããï¼æåã® 4 ã¤ã®æ¡ä»¶ã¯ãJavaScript ã³ã¼ãã«ããä»å ¥ãªãã«ãã¢ãã¡ã¼ã·ã§ã³ã®å¹æãå¤åãããçµãã£ããããªããã¨ãä¿è¨¼ãã¾ããæå¾ã®æ¡ä»¶ã¯ãã¢ãã¡ã¼ã·ã§ã³ãå®éã«ä½ãã®è¦ç´ ã®ã¹ã¿ã¤ã«è¨å®ã«å½±é¿ããªããã¨ãä¿è¨¼ãã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ãèªåçã«è§£é¤ãããã¨ããã®ã¢ãã¡ã¼ã·ã§ã³ã« remove
ã¤ãã³ããçºè¡ããã¾ãã
ãã©ã¦ã¶ã¼ãã¢ãã¡ã¼ã·ã§ã³ãèªåçã«åé¤ãããã¨ãé²ãã«ã¯ããã®ã¢ãã¡ã¼ã·ã§ã³ã® persist()
ã¡ã½ãããå¼ã³åºãã¦ãã ããã
ã¢ãã¡ã¼ã·ã§ã³ã® animation.replaceState
ããããã£ã¯ãã¢ãã¡ã¼ã·ã§ã³ãåé¤ãããå ´å㯠removed
ãã¢ãã¡ã¼ã·ã§ã³ã« persist()
ãå¼ã³åºãããå ´å㯠persisted
ãããã§ãªãå ´å㯠active
ã«ãªãã¾ãã
ååºé害ã®ããã¦ã¼ã¶ã¼ã®ã¢ã¯ã»ã·ããªãã£ãæ¹åãããªã©ããµã¤ãå
¨ä½ã®ã¢ãã¡ã¼ã·ã§ã³ãé
ããããã¨ããplaybackRate 以å¤ã®æ¹æ³ã§è¡ããã¨ãæ³åãã¦ã¿ã¦ãã ããããã¹ã¦ã® CSS ã«ã¼ã«ã§æéãåè¨ç®ãããã¨ãªã CSS ã§å
¨ã¦ãè¡ããã¨ã¯ä¸å¯è½ã§ãããã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã§ã¯ã次㮠Document.getAnimations
ã¡ã½ããã使ç¨ãã¦ã次ã®ããã«ãã¼ã¸ä¸ã®åã¢ãã¡ã¼ã·ã§ã³ãã«ã¼ãã㦠playbackRate
ãååã«ãããã¨ãã§ãã¾ãã
document.getAnimations().forEach((animation) => {
animation.updatePlaybackRate(animation.playbackRate * 0.5);
});
ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ãå©ç¨ããã¨ã夿´ããå¿ è¦ãããã®ã¯ 1 ã¤ã®å°ããªããããã£ã ãã§ãï¼
CSS ã¢ãã¡ã¼ã·ã§ã³ã ãã§ã¯é£ããã®ã¯ãä»ã®ã¢ãã¡ã¼ã·ã§ã³ãæä¾ããå¤ã«ä¾åããã¨ãã§ããä¾ãã°ã¢ãªã¹ã®æ¡å¤§/縮å°ã²ã¼ã ã®ä¾ã§ã¯ãã±ã¼ãã®æéã«ã¤ãã¦å¥å¦ãªãã¨ã«æ°ã¥ããããããã¾ããã
document.getElementById("eat-me_sprite").animate([], {
duration: aliceChange.effect.timing.duration / 2,
});
ããã§ä½ãããã£ã¦ãããçè§£ããããã«ãã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ãè¦ã¦ã¿ã¾ãããã
const aliceChange = document
.getElementById("alice")
.animate(
[
{ transform: "translate(-50%, -50%) scale(.5)" },
{ transform: "translate(-50%, -50%) scale(2)" },
],
{
duration: 8000,
easing: "ease-in-out",
fill: "both",
},
);
ã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã§ã¯ã8 ç§ããã¦ãµã¤ãºãååãã 2 åã«ãªãã¾ãããã®å¾ã彼女ã®å¹æã忢ãã¾ãã
ããã¢ãã¡ã¼ã·ã§ã³ã®å§ãã«ä¸æåæ¢ãããã¾ã¾ã«ãã¦ããã¨ãããã«å
¨é¨ã飲ã¿å¹²ãããã®ããã«ãååã®å¤§ããããå§ã¾ããã¨ã«ãªãã¾ããã¢ãã¡ã¼ã·ã§ã³ã® "playhead" ãä¸å¤®ã«è¨å®ããã¢ãã¡ã¼ã·ã§ã³ããã§ã«ååçµãã£ã¦ããç¶æ
ã«ãããã¨æãã¾ããAnimation.currentTime
ã 4 ç§ã«è¨å®ãããã®ã§ã次ã®ããã«ãã¾ãã
aliceChange.currentTime = 4000;
ãããããã®ã¢ãã¡ã¼ã·ã§ã³ã§ä½æ¥ãã¦ããéãã¢ãªã¹ã®åçæéãä½åº¦ã夿´ããããããã¾ããã彼女㮠currentTime
ãåçã«è¨å®ããã°ãæå»ã 2 åæ´æ°ããå¿
è¦ã¯ãªãã§ãããï¼å®éãaliceChange ã® Animation.effect
ããããã£ãåç
§ãããã¨ã§ãã¢ãªã¹ã«æå¹ãªã¨ãã§ã¯ãã®è©³ç´°ããã¹ã¦æ ¼ç´ãããªãã¸ã§ã¯ããè¿ããã¨ãã§ãã¾ãã
aliceChange.currentTime = aliceChange.effect.getComputedTiming().duration / 2;
effect
ãå©ç¨ããã¨ãã¢ãã¡ã¼ã·ã§ã³ã®ãã¼ãã¬ã¼ã ã¨ã¿ã¤ãã³ã°ã®ããããã£ã«ã¢ã¯ã»ã¹ã§ãã¾ããaliceChange.effect.getComputedTiming()
ã¯ã¢ãªã¹ã®ã¿ã¤ãã³ã°ãªãã¸ã§ã¯ãã示ãã¾ããããã«ã¯ duration
ãå«ã¾ãã¦ãã¾ãã ã¢ãã¡ã¼ã·ã§ã³ã®ã¿ã¤ã ã©ã¤ã³ã®ä¸éç¹ãåå¾ããã«ã¯ãã¢ãªã¹ã®åçæéãååã«åå²ããé常ã®èº«é·ã«è¨å®ãã¾ããããã§ãã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ãããããã®æ¹åã«å·»ãæ»ãããåçãããããã¨ãå°ãããããã大ããããããããã¨ãã§ãã¾ãã
ã¾ããããã«ã¨ã±ã¼ãã®åçæéãè¨å®ããã¨ãã«ãåããã¨ãåºæ¥ã¾ãã
const drinking = document
.getElementById("liquid")
.animate([{ height: "100%" }, { height: "0" }], {
fill: "forwards",
duration: aliceChange.effect.getComputedTiming().duration / 2,
});
drinking.pause();
ããã§ã3 ã¤ã®ã¢ãã¡ã¼ã·ã§ã³ããã¹ã¦ 1 ã¤ã®åçæéä¸ã«ç¹ããã1 ã¤ã®å ´æããç°¡åã«å¤æ´ãããã¨ãåºæ¥ã¾ãã
ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ãå©ç¨ãã¦ãã¢ãã¡ã¼ã·ã§ã³ã®ç¾å¨ã®æå»ãææ¡ãããã¨ãåºæ¥ã¾ããã±ã¼ããé£ã¹ã¦ãªããªã£ãããããã«ã空ã«ãªã£ããããã¨ã²ã¼ã ãçµäºãã¾ããã¢ãªã¹ã大ãããã¦ãã¢ãéããªããªãããå°ãããã¦ãã¢ããã«å±ããªããªããã¯ã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã«ãã£ã¦è¡¨ç¾ãããã¬ã¤ã¤ã¼ã®æä½ã«ä¾åãã¾ããã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã® currentTime
ãåå¾ãã¦ã彼女㮠activeDuration
ã§å²ããã¨ã§å½¼å¥³ã®å¤§ãããææ¡ã§ãã¾ãã
const endGame = () => {
// ã¢ãªã¹ã®ã¿ã¤ã ã©ã¤ã³ã®åçä½ç½®ãåå¾
const alicePlayhead = aliceChange.currentTime;
const aliceTimeline = aliceChange.effect.getComputedTiming().activeDuration;
// ã¢ãªã¹ããã®ä»ã®ã¢ãã¡ã¼ã·ã§ã³ã忢
stopPlayingAlice();
// 3 ã¤ã®ã©ãã«å
¥ããã夿
const aliceHeight = alicePlayhead / aliceTimeline;
if (aliceHeight <= 0.333) {
// ã¢ãªã¹ãå°ãããªã
// â¦
} else if (aliceHeight >= 0.666) {
// ã¢ãªã¹ã大ãããªã
// â¦
} else {
// ã¢ãªã¹ã®å¤§ããã¯ãã¾ãå¤ãããªã
// â¦
}
};
ã¡ã¢: getAnimations()
㨠effect
ã¯ããã®è¨äºãæ¸ãã¦ããæç¹ã§ã¯ãã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å¯¾å¿ãã¦ããããã§ã¯ããã¾ããããããªãã£ã«ã§ã¯å¯¾å¿ãã¦ãã¾ãã
CSS ã¢ãã¡ã¼ã·ã§ã³ã¨ãã©ã³ã¸ã·ã§ã³ã«ã¯ç¬èªã®ã¤ãã³ããªã¹ãã¼ãããããããã¯ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã§ãå©ç¨å¯è½ã§ãã
onfinish
ã¯çµäºã¤ãã³ããã³ãã©ã¼ã§ãããfinish()
ã¡ã½ããã使ç¨ããã¨æåã§èµ·åãããã¨ãã§ãã¾ããoncancel
㯠cancel
ã®ã¤ãã³ããã³ãã©ã¼ã§ãããcancel()
ã¡ã½ããã使ç¨ããã¨èµ·åãããã¨ãã§ãã¾ããããã§ã¯ãã±ã¼ããããã«ãã¢ãªã¹ã®ã³ã¼ã«ããã¯ãè¨å®ãã¦ãendGame
颿°ãèµ·åãã¾ãã
// ã±ã¼ããããã«ããªããªã£ãæ
nommingCake.onfinish = endGame;
drinking.onfinish = endGame;
// ã¢ãªã¹ã®ã¢ãã¡ã¼ã·ã§ã³ãçµããã«éããæ
aliceChange.onfinish = endGame;
ããã«è¯ããã¨ã«ãã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã§ã¯ã¢ãã¡ã¼ã·ã§ã³çµäºæã«è§£æ±ºãããããã¾ãã¯ãã£ã³ã»ã«æã«æå¦ããã finished
ãããã¹ãæä¾ãã¦ãã¾ãã
以ä¸ãã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã®åºæ¬çãªæ©è½ã§ããããã§ããã©ã¦ã¶ã¼ã§ã®ã¢ãã¡ã¼ã·ã§ã³ã¨ãããã¦ãµã®ã®ç©´ã«é£ã³è¾¼ããæºåãã§ããèªåèªèº«ã§ã¢ãã¡ã¼ã·ã§ã³ã®å®é¨ãæ¸ãæºåãã§ããã¯ãã§ãã
é¢é£æ å ±RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4