portfolio-page/src/components/BackToTopButton.tsx

42 lines
951 B
TypeScript

import { useState, useEffect } from 'react';
import { ArrowUp } from 'lucide-react';
export default function BackToTopButton() {
const [isVisible, setIsVisible] = useState(false);
useEffect(() => {
const toggleVisibility = () => {
// Show button when page is scrolled down 300px
if (window.scrollY > 300) {
setIsVisible(true);
} else {
setIsVisible(false);
}
};
window.addEventListener('scroll', toggleVisibility);
return () => {
window.removeEventListener('scroll', toggleVisibility);
};
}, []);
const scrollToTop = () => {
window.scrollTo({
top: 0,
behavior: 'smooth',
});
};
return (
<button
onClick={scrollToTop}
className={`back-to-top ${isVisible ? 'back-to-top--visible' : ''}`}
aria-label="Back to top"
type="button"
>
<ArrowUp className="back-to-top__icon" aria-hidden="true" />
</button>
);
}