代码实现
import { useEffect, useRef, useState } from 'react';
const DynamicPositionTracker = () => {
const [distance, setDistance] = useState(0);
const divRef = useRef(null);
useEffect(() => {
const targetDiv = divRef.current;
if (!targetDiv) return;
const calculate = () => {
const rect = targetDiv.getBoundingClientRect();
const scrollTop = window.pageYOffset;
setDistance(rect.top + scrollTop);
};
calculate();
const resizeObserver = new ResizeObserver(calculate);
resizeObserver.observe(targetDiv);
window.addEventListener("scroll", calculate);
return () => {
resizeObserver.disconnect();
window.removeEventListener("scroll", calculate);
};
}, []);
return (
<div ref={divRef}>
当前距离顶部: {distance}px
</div>
);
};