UNPKG

valaxy-theme-sakura

Version:

<h1 align="center">valaxy-theme-sakura</h1> <pre align="center"> 一个简单、个性化、可爱的动漫风格博客主题 ❥(ゝω・✿ฺ) </pre>

53 lines (48 loc) 1.41 kB
import { useDark, useStorage } from '@vueuse/core' import { nextTick } from 'vue' export const isDark = useDark() export const englishOnly = useStorage('antfu-english-only', false) /** * Credit to [@hooray](https://github.com/hooray) * @see https://github.com/vuejs/vitepress/pull/2347 */ export function toggleDark(event: MouseEvent) { // @ts-expect-error experimental API const isAppearanceTransition = document.startViewTransition && !window.matchMedia('(prefers-reduced-motion: reduce)').matches if (!isAppearanceTransition) { isDark.value = !isDark.value return } const x = event.clientX const y = event.clientY const endRadius = Math.hypot( Math.max(x, innerWidth - x), Math.max(y, innerHeight - y), ) const transition = document.startViewTransition(async () => { isDark.value = !isDark.value await nextTick() }) transition.ready .then(() => { const clipPath = [ `circle(0px at ${x}px ${y}px)`, `circle(${endRadius}px at ${x}px ${y}px)`, ] document.documentElement.animate( { clipPath: isDark.value ? [...clipPath].reverse() : clipPath, }, { duration: 400, easing: 'ease-out', pseudoElement: isDark.value ? '::view-transition-old(root)' : '::view-transition-new(root)', }, ) }) }