Files
blog/components/cursor-effect.tsx
Gabriel Kaszewski 2e7309434d
All checks were successful
Build and Deploy Blog / build-and-deploy-local (push) Successful in 43s
Add cursor hiding effect for improved user experience
2025-09-04 00:37:41 +02:00

46 lines
1.2 KiB
TypeScript

"use client";
import { useEffect } from "react";
const HIDE_CURSOR_CLASS = "hide-native-cursor";
const JANUARY = 0;
const FEBRUARY = 1;
const DECEMBER = 11;
export default function CursorEffect() {
useEffect(() => {
let cursor: any;
let isMounted = true;
const currentMonth = new Date().getMonth();
const isWinter =
currentMonth === DECEMBER ||
currentMonth === JANUARY ||
currentMonth === FEBRUARY;
import("cursor-effects").then((effects) => {
if (!isMounted) return;
if (!isWinter && effects?.trailingCursor) {
document.body.classList.add(HIDE_CURSOR_CLASS);
const TrailingCursor = effects.trailingCursor as any;
cursor = new TrailingCursor();
} else if (isWinter && effects?.snowflakeCursor) {
document.body.classList.remove(HIDE_CURSOR_CLASS);
const SnowflakeCursor = effects.snowflakeCursor as any;
cursor = new SnowflakeCursor();
}
});
return () => {
isMounted = false;
document.body.classList.remove(HIDE_CURSOR_CLASS);
if (cursor && typeof cursor.destroy === "function") {
cursor.destroy();
}
};
}, []);
return null;
}