fix: scope back-to-top to browse, speed up reveal, reset scroll on sort change

- BackToTop now only mounts on the /browse feed (covers all / latest /
  popular / search) instead of every route.
- Reveal animation duration cut 0.4s -> 0.25s so scrolled-in content
  appears faster.
- ScrollToTop also watches `search`, so switching between sort views on
  the same /browse path (e.g. 全部资料 <-> 热门资料) returns to the top.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
TerryM
2026-05-29 13:22:40 +08:00
parent 559c4f19c8
commit 4f6b4a498f
3 changed files with 4 additions and 4 deletions

View File

@@ -11,12 +11,12 @@ import { useLocation } from "react-router-dom";
* anchor / deep-link targets keep their own scroll handling. * anchor / deep-link targets keep their own scroll handling.
*/ */
export function ScrollToTop() { export function ScrollToTop() {
const { pathname, hash } = useLocation(); const { pathname, search, hash } = useLocation();
useEffect(() => { useEffect(() => {
if (hash) return; if (hash) return;
window.scrollTo({ top: 0, left: 0 }); window.scrollTo({ top: 0, left: 0 });
}, [pathname, hash]); }, [pathname, search, hash]);
return null; return null;
} }

View File

@@ -669,7 +669,7 @@ export function PublicLayout() {
</div> </div>
</nav> </nav>
<BackToTop /> {pathname === "/browse" ? <BackToTop /> : null}
</div> </div>
); );
} }

View File

@@ -5,7 +5,7 @@ export const EASE_OUT = [0.22, 1, 0.36, 1] as const;
/** Base transition for reveal-style animations. */ /** Base transition for reveal-style animations. */
export const baseTransition: Transition = { export const baseTransition: Transition = {
duration: 0.4, duration: 0.25,
ease: EASE_OUT, ease: EASE_OUT,
}; };