Skip to content

Commit 8aacb15

Browse files
author
snailRun
committed
feat: 优化动画
1 parent ec909da commit 8aacb15

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/components/ThemeToggle.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ import { useTheme } from 'next-themes';
66
import { useEffect, useRef, useState } from 'react';
77
import { ThemeSwitcher } from 'theme-toggle-animation';
88
import { Toaster } from './ui/sonner';
9-
const DURATION = 300;
9+
const DURATION = 500;
1010
// 创建 ThemeSwitcher 实例
1111
const themeSwitcher = new ThemeSwitcher({
1212
customHtmlStyles: true,
1313
transition: 'circle',
1414
duration: DURATION
1515
});
1616
export function ThemeToggle() {
17+
const eventRef = useRef<AnyIfEmpty>(null);
1718
const [mounted, setMounted] = useState(false);
1819
const { theme, setTheme }: AnyIfEmpty = useTheme();
1920
const toggleRef = useRef<AnyIfEmpty>(null);
@@ -55,19 +56,19 @@ export function ThemeToggle() {
5556
if (!mounted) {
5657
return null;
5758
}
58-
const handleThemeChange = (event: React.MouseEvent & AnyIfEmpty) => {
59+
const handleThemeChange = () => {
5960
const newTheme = theme === 'dark' ? 'light' : 'dark';
60-
themeSwitcher.toggleTheme(event);
61+
themeSwitcher.toggleTheme(eventRef.current);
6162
setTimeout(() => {
6263
setTheme(newTheme);
63-
}, DURATION);
64+
});
6465
};
6566
return (
6667
<div className="flex items-center space-x-2">
6768
<Switch
6869
ref={toggleRef}
6970
id="theme-toggle"
70-
// onClick={handleThemeChange}
71+
onClick={(event) => (eventRef.current = event)}
7172
checked={theme === 'dark'}
7273
onCheckedChange={handleThemeChange}
7374
className="w-16 h-8 px-1"

0 commit comments

Comments
 (0)