调用 document.startViewTransition(() => { 修改 DOM }),浏览器会对旧 DOM 截图,执行你的更新(此时页面不可见),然后把新状态淡入式覆盖旧截图。无需任何动画库,就能得到「换页一样」的过渡。
默认是交叉淡入;用 ::view-transition-group/old/new 伪元素配合 CSS 可以做 FLIP 飞行过渡——给元素命名 view-transition-name 后,新旧两个状态下它的位置/尺寸变化会被自动动画。跨文档(MPA)版本也已支持。
<style> .card { view-transition-name: card; } @keyframes fade { from { opacity: 0 } to { opacity: 1 } } </style> <div class="card">我会飞过去</div> <button data-act="run" onclick="document.startViewTransition(()=>{document.querySelector('.card').style.transform='translateX(200px)'})">点击移动</button>