KeyframeEffect: KeyframeEffect() ã³ã³ã¹ãã©ã¯ã¿ã¼
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2020å¹´3æ.
KeyframeEffect() ã¯ã¦ã§ãã¢ãã¡ã¼ã·ã§ã³ API ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãæ°ãã KeyframeEffect ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ãè¿ããã¾ãæ¢åã®ãã¼ãã¬ã¼ã 广ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ãè¤è£½ãããã¨ãã§ãã¾ãã
æ§æ
new KeyframeEffect(target, keyframes)
new KeyframeEffect(target, keyframes, options)
new KeyframeEffect(sourceKeyFrames)
弿°
è¤æ°ã®å¼æ°ãæã¤ã³ã³ã¹ãã©ã¯ã¿ã¼ï¼ä¸è¨åç
§ï¼ã¯ãå®å
¨ã«æ°ãã KeyframeEffect ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ãçæãã¾ãããã®å¼æ°ã¯ä»¥ä¸ã®éãã§ãã
target-
ã¢ãã¡ã¼ã·ã§ã³ãã DOM è¦ç´ ãã¾ãã¯
nullã§ãã keyframes-
ãã¼ãã¬ã¼ã ãªãã¸ã§ã¯ã ã¾ãã¯
nullã§ãã optionsçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ã®åçæéï¼ããªç§ï¼ãè¡¨ãæ´æ°ãã¾ãã¯æ¬¡ã®ããããä¸ã¤ä»¥ä¸ãå«ã¾ãã¦ãããªãã¸ã§ã¯ãã§ãã
delayçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ãå§ã¾ãã®ãå¾ ã¤ããªç§åä½ã®æ°å¤ãããã©ã«ã㯠0 ã§ãã
directionçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ãé æ¹åã«å®è¡ãããã (
normal)ãéæ¹åã«å®è¡ãããã (reverse)ãããããã®å復å¦çå¾ã«æ¹åãåãæ¿ããã (alternate)ãã¾ãã¯éæ¹åã«å®è¡ãããããããã®å復å¦çå¾ã«æ¹åãåãæ¿ããã (alternate-reverse)ãããã©ã«ãã¯"normal"ã§ãã durationçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ã®ããããã®å復ãå®äºããã¾ã§ã®ããªç§æ°ãããã©ã«ãå¤ã¯ 0 ã§ããæè¡çã«ã¯ãªãã·ã§ã³ã§ããããã®å¤ã 0 ã§ããå ´åãã¢ãã¡ã¼ã·ã§ã³ã¯å®è¡ãããªããã¨ã«æ³¨æãã¦ãã ããã
easingçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ã®æéçµéã«ä¼´ãå¤åçã
"linear","ease-in","step-end","cubic-bezier(0.42, 0, 0.58, 1)"ãªã©ã®<easing-function>ãåãå ¥ãã¾ããããã©ã«ãã¯"linear"ã§ãã endDelayçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³çµäºå¾ï¼ããªç§åä½ï¼ã®å¾ ã¡æéãæå®ãã¾ãããã®å¤ã¯ãå¥ã®ã¢ãã¡ã¼ã·ã§ã³ã®çµäºæéã«åºã¥ãã¦ã¢ãã¡ã¼ã·ã§ã³ãã·ã¼ã±ã³ã¹ããå ´åã«ä¸»ã«ä½¿ç¨ããã¾ããããã©ã«ãå¤ã¯ 0 ã§ãã
fillçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ã®å¹æããåçåã«è¦ç´ ã«åæ ããã (
"backwards")ãåçå®äºå¾ãä¿æããã ("forwards")ããããã¯ä¸¡æ¹ (both) ã§ããããæå®ãã¾ããããã©ã«ãã¯"none"ã§ãã iterationStartçç¥å¯-
å復ã®ã©ã®æç¹ã§ã¢ãã¡ã¼ã·ã§ã³ãéå§ããããè¨è¿°ãã¾ããä¾ãã° 0.5 ã¯ã¾ãå復å¦çã®ä¸éããéå§ãããã¨ã示ãããã®å¤ãè¨å®ããå ´åã2 åã®å復ãæã¤ã¢ãã¡ã¼ã·ã§ã³ã¯ 3 åç®ã®å復ã®ä¸éã§çµäºãã¾ããããã©ã«ã㯠0.0 ã§ãã
iterationsçç¥å¯-
ã¢ãã¡ã¼ã·ã§ã³ãç¹°ãè¿ãããåæ°ã§ããããã©ã«ãã¯
1ã§ãè¦ç´ ãåå¨ããéãç¹°ãè¿ãç¶ããå ´åã¯åæã«Infinityãæå®ãããã¨ãå¯è½ã§ãã compositeçç¥å¯-
ãã®ã¢ãã¡ã¼ã·ã§ã³ã¨ãèªåèªèº«ã§åææ¼ç®ãæå®ãã¦ããªãå¥åã®ã¢ãã¡ã¼ã·ã§ã³ã¨ã®éã§ãå¤ãã©ã®ããã«çµã¿åããããããæ±ºå®ãã¾ããããã©ã«ãã¯
replaceã§ããaddã¯å ç®å¹æãæå®ããããããã®å復å¦çãåã®å¦çãåºã«ç©ã¿éãããã¾ããä¾ãã°transformã«ããã¦ãtranslateX(-200px)ã¯å è¡ããrotate(20deg)å¤ã䏿¸ããããtranslateX(-200px) rotate(20deg)ã¨ããçµæã«ãªãã¾ããaccumulateã¯ä¼¼ã¦ãã¾ãããå°ãè³¢ããã®ã§ããblur(2)ã¨blur(5)ã¯blur(7)ã«ãªããblur(2) blur(5)ã«ã¯ãªãã¾ãããreplaceã¯ãåã®å¤ãæ°ããå¤ã§ä¸æ¸ããã¾ãã
iterationCompositeçç¥å¯-
ãã®ã¢ãã¡ã¼ã·ã§ã³ã«ããã¦ãå復å¦çãã¨ã«å¤ãã©ã®ããã«æ§ç¯ãããããæ±ºå®ãã¾ãã
accumulateã¾ãã¯replaceã«è¨å®ãããã¨ãã§ãã¾ãï¼ä¸è¨åç §ï¼ãããã©ã«ãã¯replaceã§ãã pseudoElementçç¥å¯-
æ¬ä¼¼è¦ç´ã»ã¬ã¯ã¿ã¼ãä¾ãã°"::before"ãªã©ãå«ãæååã§ããåå¨ããå ´åã广ã¯targetèªä½ã§ã¯ãªããtargetã®é¸æãããæ¬ä¼¼è¦ç´ ã«é©ç¨ããã¾ãã
åä¸å¼æ°ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ï¼ä¸è¨åç
§ï¼ã¯ãæ¢åã® KeyframeEffect ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã®è¤è£½ãçæãã¾ãã弿°ã¯æ¬¡ã®éãã§ãã
sourceKeyFrames-
è¤è£½ãã
KeyframeEffectãªãã¸ã§ã¯ãã§ãã
ä¾
次ã®ä¾ã§ã¯ãKeyframeEffect ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ãã¦ãçµµæåãåºã®ä¸ã転ããæ¹æ³ã決å®ããä¸é£ã®ãã¼ãã¬ã¼ã ãçæãã¾ãã
const emoji = document.querySelector("div"); // ã¢ãã¡ã¼ã·ã§ã³ããè¦ç´
const rollingKeyframes = new KeyframeEffect(
emoji,
[
{ transform: "translateX(0) rotate(0)" }, // ãã¼ãã¬ã¼ã
{ transform: "translateX(200px) rotate(1.3turn)" }, // ãã¼ãã¬ã¼ã
],
{
// ãã¼ãã¬ã¼ã ãªãã·ã§ã³
duration: 2000,
direction: "alternate",
easing: "ease-in-out",
iterations: "Infinity",
},
);
const rollingAnimation = new Animation(rollingKeyframes, document.timeline);
rollingAnimation.play();
<div>ð¤£</div>
仿§æ¸
| Specification |
|---|
| Web Animations > # dom-keyframeeffect-keyframeeffect > |