Amélioration de la transition de thème avec une animation de clipPath et ajustement des éléments pseudo pour le mode sombre

This commit is contained in:
2025-07-29 12:59:47 +00:00
parent 04b580661b
commit f6ea7fc58c

View File

@@ -21,23 +21,28 @@ function startViewTransition(event: MouseEvent | { clientX: number, clientY: num
Math.max(y, window.innerHeight - y),
)
const transition = document.startViewTransition(() => {
const transition = document.startViewTransition(async () => {
switchTheme()
await nextTick()
})
transition.ready.then(() => {
const duration = 500
const clipPath = [
`circle(0px at ${x}px ${y}px)`,
`circle(${endRadius}px at ${x}px ${y}px)`,
]
document.documentElement.animate(
{
clipPath: [
`circle(0px at ${x}px ${y}px)`,
`circle(${endRadius}px at ${x}px ${y}px)`,
],
clipPath: colorMode.value === 'dark'
? [...clipPath].reverse()
: clipPath,
},
{
duration,
easing: 'cubic-bezier(.76,.32,.29,.66)',
pseudoElement: '::view-transition-new(root)',
duration: 500,
easing: 'ease-out',
pseudoElement: colorMode.value === 'dark'
? '::view-transition-old(root)'
: '::view-transition-new(root)',
},
)
})