Document: startViewTransition() ã¡ã½ãã
Baseline
2025
*
æè¿å©ç¨å¯è½
October 2025以éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
startViewTransition() 㯠Document ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ãæ°ããå䏿æ¸å
(SPA) ã®ãã¥ã¼é·ç§»ãå§ããããã表ã ViewTransition ãªãã¸ã§ã¯ããè¿ãã¾ãã
startViewTransition() ãå¼ã³åºãã¨ããã¥ã¼é·ç§»ã®ããã»ã¹ã§èª¬æããã¦ããä¸é£ã®æé ãç¶ãã¾ãã
æ§æ
startViewTransition()
startViewTransition(updateCallback)
startViewTransition(options)
弿°
updateCallbackçç¥å¯-
é常ãSPA ã®ãã¥ã¼é·ç§»å¦çä¸ã« DOM ãæ´æ°ããããã«å¼ã³åºããããªãã·ã§ã³ã®ã³ã¼ã«ããã¯é¢æ°ã§ããããã¹ (
Promise) ãè¿ãã¾ãããã®ã³ã¼ã«ããã¯ã¯ã API ãç¾å¨ã®ãã¼ã¸ã®ã¹ãããã·ã§ãããåå¾ããã¨ãã«å¼ã³åºããã¾ããã³ã¼ã«ããã¯ãè¿ããããã¹ãå±¥è¡ãããã¨ã次ã®ãã¬ã¼ã ã§ãã¥ã¼é·ç§»ãå§ã¾ãã¾ããã³ã¼ã«ããã¯ãè¿ããããã¹ãæå¦ãããå ´åããã©ã³ã¸ã·ã§ã³ã¯æ¾æ£ããã¾ãã optionsçç¥å¯-
ãã®ãã¥ã¼é·ç§»ãæ§æããããã®ãªãã·ã§ã³ãå«ããªãã¸ã§ã¯ãã§ãã以ä¸ã®ããããã£ãç½®ããã¨ãã§ãã¾ãã
updateçç¥å¯-
åè¿°ã®
updateCallback颿°ã¨åããã®ã§ããããã©ã«ãã¯nullã§ãã typesçç¥å¯-
ãã¥ã¼é·ç§»ã«é©ç¨ãããåã表ãæååã®é åã§ãããã¥ã¼é·ç§»åã使ç¨ããã¨ãçºçããé·ç§»ã®ç¨®é¡ã«åºã¥ãã¦ãCSS ã¹ã¿ã¤ã«ã JavaScript ãã¸ãã¯ã鏿çã«é©ç¨ãããã¨ãã§ãã¾ããããã©ã«ãã¯ç©ºã®é åã§ãã
è¿å¤
ViewTransition ã®ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã§ãã
ä¾
å®å ¨ãªä¾ã®ãªã¹ãã«ã¤ãã¦ã¯ããã¥ã¼é·ç§» API > ä¾ãåç §ãã¦ãã ããã
åºæ¬çãªä½¿ãæ¹
ãã®å䏿æ¸å
ã§ã®ãã¥ã¼é·ç§»ã§ã¯ããã©ã¦ã¶ã¼ããã¥ã¼é·ç§»ã«å¯¾å¿ãã¦ãããã©ããã確èªãã¾ãã
æªå¯¾å¿ã®å ´åãä»£æ¿ææ®µãç¨ãã¦èæ¯è²ãè¨å®ããå³åº§ã«é©ç¨ãã¾ãã
対å¿ãã¦ããå ´åã¯ãCSSã§å®ç¾©ããã¢ãã¡ã¼ã·ã§ã³ã«ã¼ã«ã¨å
±ã«ãå®å
¨ã« document.startViewTransition() ãå¼ã³åºããã¨ãã§ãã¾ãã
<main>
<section></section>
<button id="change-color">è²ã夿´</button>
</main>
::view-transition-group ã使ç¨ãã¦ãanimation-duration ã 2 ç§ã«è¨å®ãã¾ãã
html {
--bg: indigo;
}
main {
display: flex;
flex-direction: column;
gap: 5px;
}
section {
background-color: var(--bg);
height: 60px;
border-radius: 5px;
}
::view-transition-group(root) {
animation-duration: 2s;
}
const colors = ["darkred", "darkslateblue", "darkgreen"];
const colBlock = document.querySelector("section");
let count = 0;
const updateColor = () => {
colBlock.style = `--bg: ${colors[count]}`;
count = count !== colors.length - 1 ? ++count : 0;
};
const changeColor = () => {
// ãã¥ã¼é·ç§»ã«å¯¾å¿ãã¦ããªããã©ã¦ã¶ã¼åãã®ä»£æ¿å¦ç
if (!document.startViewTransition) {
updateColor();
return;
}
// ãã¥ã¼é·ç§»ã使ç¨ããå ´å
const transition = document.startViewTransition(() => {
updateColor();
});
};
const changeColorButton = document.querySelector("#change-color");
changeColorButton.addEventListener("click", changeColor);
changeColorButton.addEventListener("keypress", changeColor);
ãã¥ã¼é·ç§»ã«å¯¾å¿ãã¦ããå ´åããã¿ã³ãã¯ãªãã¯ããã¨ã2 ç§ããã¦è²ãå¾ã ã«å¤åãã¾ãã 対å¿ãã¦ããªãå ´åã¯ãã¢ãã¡ã¼ã·ã§ã³ãªãã§ãä»£æ¿æ¹æ³ãç¨ãã¦èæ¯è²ãè¨å®ããã¾ãã
仿§æ¸
| 仿§æ¸ |
|---|
| CSS View Transitions Module Level 1 > # dom-document-startviewtransition > |
| CSS View Transitions Module Level 2 > # dom-document-startviewtransition > |