Element: animate() ã¡ã½ãã
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2020å¹´3æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
Element ã¤ã³ã¿ã¼ãã§ã¤ã¹ã® animate() ã¡ã½ããã¯ãæ°ãã Animation ãçæãããã®è¦ç´ ã¸é©ç¨ããããã¦ã¢ãã¡ã¼ã·ã§ã³ã®åçãè¡ãã·ã§ã¼ãã«ããã¡ã½ããã§ããçæãã Animation ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¾ãã
ã¡ã¢:
è¦ç´ ã«ã¯è¤æ°ã®ã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ãããã¨ãã§ãã¾ããElement.getAnimations() ãå¼ã³åºãã¨ãè¦ç´ ã«ä½ç¨ããã¢ãã¡ã¼ã·ã§ã³ã®ãªã¹ããåå¾ãããã¨ãã§ãã¾ãã
æ§æ
animate(keyframes, options)
弿°
keyframes-
ãã¼ãã¬ã¼ã ãªãã¸ã§ã¯ãã®é åãã¾ãã¯ããããã£ãå復å¦çå¯è½ãªå¤ã®é åã§ããåä¸ã®ãã¼ãã¬ã¼ã ãªãã¸ã§ã¯ãã®ã©ã¡ããã§ãã詳ãã㯠Keyframe ã®æ¸å¼ãåç §ãã¦ãã ããã
options-
ã¢ãã¡ã¼ã·ã§ã³ã®åçæéãè¡¨ãæ´æ°å¤ï¼ããªç§åä½ï¼ãã¾ãã¯
KeyframeEffect()ã®ãªãã·ã§ã³ã®å¼æ°ã以ä¸ã®ãªãã·ã§ã³ã§è¨è¿°ããã 1 ã¤ä»¥ä¸ã®ã¿ã¤ãã³ã°ããããã£ãå«ããªãã¸ã§ã¯ãã®ã©ã¡ããã§ããidçç¥å¯-
animate()ã®åºæã®ããããã£ã§ãããã®ã¢ãã¡ã¼ã·ã§ã³ãåç §ããæååã§ãã rangeEndçç¥å¯-
ã¿ã¤ã ã©ã¤ã³ã«æ²¿ã£ãã¢ãã¡ã¼ã·ã§ã³ã®é©ç¨ç¯å²ã®çµãããã¤ã¾ãã¿ã¤ã ã©ã¤ã³ã®ã©ãã§ã¢ãã¡ã¼ã·ã§ã³ãçµããããæå®ãã¾ããCSS ã®
animation-range-endããããã£ã«ç¸å½ãã¾ããrangeEndã¯ä»¥ä¸ã®ããã«ãæ§ã ãªå¤ãåããã¨ãã§ãã¾ãã-
æååã§ã
normalï¼ã¢ãã¡ã¼ã·ã§ã³ã®ç¯å²ã«å¤æ´ããªããã¨ãæå³ãã¾ãï¼ããªãã»ããã表ã CSS ã®<length-percentage>ã<timeline-range-name>ã<timeline-range-name>ã®ããããã¨ãããã«ç¶ã<length-percentage>ã§ããä¾ãã°æ¬¡ã®ããã«ãªãã¾ãã"normal" "entry" "cover 100%"
å©ç¨ã§ããå¤ã®è©³ç´°ã«ã¤ãã¦ã¯
animation-rangeãåç §ãã¦ãã ãããã¾ããView Timeline Ranges Visualizer ã調ã¹ã¦ã¿ã¦ãã ãããæ§ã ãªå¤ãæå³ãã¦ãããã¨ããè¦è¦çãªå½¢å¼ã§ç°¡åã«ç¤ºããã¨ãã§ãã¾ãã -
åã®ç®æã§è¨è¿°ããã¦ãã
<timeline-range-name>ã¨<length-percentage>ã表ãrangeNameï¼æååï¼ã¨offset(CSSNumericValue) ããããã£ãæ ¼ç´ãããªãã¸ã§ã¯ããä¾ãã°ã次ã®ãããªãã®ã§ããjs{ rangeName: 'entry', offset: CSS.percent('100'), } -
CSSNumericValueã§ããªãã»ããã表ããã®ãä¾ãã°ã次ã®ãããªãã®ã§ããjsCSS.percent("100");
-
rangeStartçç¥å¯-
ã¿ã¤ã ã©ã¤ã³ã«æ²¿ã£ãã¢ãã¡ã¼ã·ã§ã³ã®é©ç¨ç¯å²ãã¤ã¾ãã¿ã¤ã ã©ã¤ã³ã®ã©ãããã¢ãã¡ã¼ã·ã§ã³ãå§ã¾ãããæå®ãã¾ããCSS ã®
animation-range-startããããã£ã«ç¸å½ãã¾ããrangeStartã¯rangeEndã¨åã種é¡ã®å¤ãåãã¾ãã timelineçç¥å¯-
animate()ã«åºæã®ããããã£ã§ããã¢ãã¡ã¼ã·ã§ã³ã«é¢é£ä»ããAnimationTimelineã§ããæ¢å®å¤ã¯Document.timelineã§ããCSS ã®animation-timelineããããã£ã«ç¸å½ãã¾ãã
è¿å¤
Animation ãè¿ãã¾ãã
ä¾
>åè»¢ã¨æ¡å¤§ç¸®å°
ãã®ä¾ã§ã¯ãanimate() ã¡ã½ããã使ç¨ãã¦è¦ç´ ã®åè»¢ã¨æ¡å¤§ç¸®å°ãè¡ã£ã¦ãã¾ãã
HTML
<div class="newspaper">Spinning newspaper<br />causes dizziness</div>
CSS
html,
body {
height: 100%;
}
body {
display: flex;
justify-content: center;
align-items: center;
background-color: black;
}
.newspaper {
padding: 0.5rem;
text-transform: uppercase;
text-align: center;
background-color: white;
cursor: pointer;
}
JavaScript
const newspaperSpinning = [
{ transform: "rotate(0) scale(1)" },
{ transform: "rotate(360deg) scale(0)" },
];
const newspaperTiming = {
duration: 2000,
iterations: 1,
};
const newspaper = document.querySelector(".newspaper");
newspaper.addEventListener("click", () => {
newspaper.animate(newspaperSpinning, newspaperTiming);
});
çµæ
ã¦ãµã®ã®ç©´ãä¸ããã¢
Down the Rabbit Hole (with the Web Animation API) ã®ãã¢ã§ã¯ãä¸ã«åãã£ã¦æ°¸é ã«æµãç¶ããã¢ãã¡ã¼ã·ã§ã³ã #tunnel è¦ç´ ã«æ½ããã¦ãã¾ããããã§ã¯ãã¢ãã¡ã¼ã·ã§ã³ãç´ æ©ã使ãã¦åçã§ãã animate() ã¡ã½ãããç¨ãããã¦ãã¾ãããã¼ãã¬ã¼ã ã¨ãã¦æ¸¡ããã¦ãããªãã¸ã§ã¯ãé
åã¨ãã¿ã¤ãã³ã°ãªãã·ã§ã³ã¨ãã¦æ¸¡ããã¦ãããªãã¸ã§ã¯ãã«æ³¨ç®ãã¦ãã ããã
document.getElementById("tunnel").animate(
[
// ãã¼ãã¬ã¼ã
{ transform: "translateY(0px)" },
{ transform: "translateY(-300px)" },
],
{
// ã¿ã¤ãã³ã°ãªãã·ã§ã³
duration: 1000,
iterations: Infinity,
},
);
æé»ã®éå§/çµäºãã¼ãã¬ã¼ã
æ°ãããã¼ã¸ã§ã³ã®ãã©ã¦ã¶ã¼ã§ã¯ãã¢ãã¡ã¼ã·ã§ã³ã®éå§ã¾ãã¯çµäºç¶æ ã®ã¿ï¼ã¤ã¾ããåä¸ã®ãã¼ãã¬ã¼ã ï¼ã§è¨å®ãããã¨ãã§ããå¯è½ã§ããã°ãã©ã¦ã¶ã¼ãã¢ãã¡ã¼ã·ã§ã³ã®ãã䏿¹ãæ¨æ¸¬ãã¾ããä¾ãã°ããã®ç°¡åãªã¢ãã¡ã¼ã·ã§ã³ ãèãã¦ã¿ã¾ãããã Keyframe ãªãã¸ã§ã¯ãã¯æ¬¡ã®ãããªãã®ã§ãã
let rotate360 = [{ transform: "rotate(360deg)" }];
ã¢ãã¡ã¼ã·ã§ã³ã®çµäºç¶æ ãæå®ããã ãã§ãéå§ç¶æ ã¯æé»ã«ãªã£ã¦ãã¾ãã
timeline, rangeStart, rangeEnd
timeline, rangeStart, rangeEnd ã®åããããã£ã®å
¸åçãªä½¿ç¨ä¾ã¯æ¬¡ã®éãã§ãã
const img = document.querySelector("img");
const timeline = new ViewTimeline({
subject: img,
axis: "block",
});
img.animate(
{
opacity: [0, 1],
transform: ["scaleX(0)", "scaleX(1)"],
},
{
fill: "both",
duration: 1,
timeline,
rangeStart: "cover 0%",
rangeEnd: "cover 100%",
},
);
仿§æ¸
| 仿§æ¸ |
|---|
| Web Animations > # dom-animatable-animate > |