반응형
marker 리스트의 lat, lng을 활용해서 최적의 bound를 설정해주는 hook
import { useEffect } from "react";
/* Tmap의 handleCreate를 활용해서 map 객체를 부모로 올린 다음 활용 */
export const useFitEdge = (
map: any,
data: any,
coordList: number[][],
margin?: { left: number, top:number, right:number, bottom:number }
) => {
useEffect(() => {
if (!coordList || coordList.length === 0) return;
const latLngBounds = new (window as any).Tmapv2.LatLngBounds();
coordList.forEach((coord) => {
latLngBounds.extend(
new (window as any).Tmapv2.LatLng(coord[0], coord[1])
);
});
map && map.fitBounds(latLngBounds, margin);
}, [map, data, coordList]);
};
만든 hook을 내가 사용하고 싶은 map에서 활용한다. 이 때 Tmap의 handlecreate를 활용해서 부모와 hook이 동일한 map 상태값을 사용하는 것이 중요하다
const fitEdgeMargin = {
left : 100, // 지도의 왼쪽과의 간격(단위 : px)
top : 100, // 지도의 위쪽과의 간격(단위 : px)
right : 100, // 지도의 오른쪽과의 간격(단위 : px)
bottom : -100 // 지도의 아래쪽과의 간격(단위 : px)
}
// FitEdge 위한 MarkerList
const markerList = [...coordArray.map((x: any) => [x.lat, x.lng])];
useFitEdge(map, coordArray, markerList, fitEdgeMargin);
const [map, setMap] = useState<any>(null);
return (
<Tmap
id={"example"}
zoom={15}
handleCreate={setMap}
}}>
<Marker .../>
</Tmap>
)
반응형
'프론트엔드 웹 > React' 카테고리의 다른 글
Error: Cannot find module '../build/Release/canvas.node' (0) | 2023.12.26 |
---|---|
useState와 setInterval 함께 사용할 때 (0) | 2023.06.23 |
gsap에서 배경 sticky하게 하고 애니메이션 적용 (+) multiple element에 동시에 애니메이션 효과 적용 (1) | 2023.06.15 |
마우스휠 사용하는 Swiper에서 특정 SwiperSlide에서는 마우스휠 멈추기 (0) | 2023.06.14 |
addEventLister scroll / wheel (0) | 2023.06.14 |