imetting_frontend/src/components/ScrollToTop.jsx

44 lines
905 B
JavaScript

import React, { useState, useEffect } from 'react';
import { ArrowUp } from 'lucide-react';
import './ScrollToTop.css';
const ScrollToTop = ({ showAfter = 300 }) => {
const [showButton, setShowButton] = useState(false);
useEffect(() => {
const handleScroll = () => {
if (window.pageYOffset > showAfter) {
setShowButton(true);
} else {
setShowButton(false);
}
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, [showAfter]);
const scrollToTop = () => {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
};
if (!showButton) {
return null;
}
return (
<button
className="scroll-to-top-btn"
onClick={scrollToTop}
aria-label="回到顶部"
>
<ArrowUp size={28} />
</button>
);
};
export default ScrollToTop;