概览View Transitions 允许以系统支持的方式在页面视图状态切换时生成快照并过渡。结合 `document.startViewTransition` 与 `@view-transition` 选择器,可构建列表到详情的大图过渡,提高用户感知品质。基础行为// app/client-transition.ts
'use client'
import { useRouter } from 'next/navigation'
export function useTransitionNav() {
const router = useRouter()
return (to: string) => {
if ((document as any).startViewTransition) {
(document as any).startViewTransition(() => router.push(to))
} else {
router.push(to)
}
}
}
列表到详情元素命名// 列表页卡片
<img src="/images/p1.jpg" style={{ viewTransitionName: 'hero-p1' }} />
// 详情页大图
<img src="/images/p1.jpg" style={{ viewTransitionName: 'hero-p1' }} />
样式治理@view-transition { /* 全局策略 */ }
::view-transition-group(hero-p1) { animation-duration: 300ms; }
::view-transition-old(hero-p1),
::view-transition-new(hero-p1) {
transform-origin: center center;
}
@media (prefers-reduced-motion: reduce) {
::view-transition-group(hero-p1) { animation-duration: 0ms; }
}
验证与指标浏览器:Chrome 120+、Edge 120+(Safari/Firefox 逐步跟进,未支持时退化为普通导航)Next.js:15.0+;Node.js:20.x导航体验:过渡时长 300ms;在弱网下无闪烁与布局抖动

发表评论 取消回复