微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mapbox GL Js,动态改变地图容器大小,无法调整地图大小

如何解决Mapbox GL Js,动态改变地图容器大小,无法调整地图大小

我的地图实例存在于一个可调整大小的容器中,当我改变大小时,我应该调用 map.resize()。我想知道有没有办法侦听 mapBox 容器调整大小事件,以便它可以触发 map.resize() ?你能建议怎么做吗?

export default function Map({ chartID,configuration,data }) {
  const classes = useStyles();
  const mapContainer = useRef(null);

  const [map,setMap] = useState(null);

  const [settings,setSettings] = useState({
    longitude: -73.935242,latitude: 40.73061,zoom: 9,});

  useEffect(() => {
    const geoFeatures = //...getting data

    const map = new mapBoxgl.Map({
      container: mapContainer.current,style: 'mapBox://',center: [settings.longitude,settings.latitude],zoom: settings.zoom,});

    map.on('move',() => {...});

    //setting map to state if we need to reference it later
    setMap(map);
    // Clean up on unmount
    return () => map.remove();
  },[]);

  return (
    <div className={classes.mapWrapper}>
      <div ref={mapContainer} className={classes.map} />
    </div>
  );
}

解决方法

我最终添加了 ResizeObserver 和 debounce map.resize()

   useEffect(()=>{
    //map init....
    const resizer = new ResizeObserver(_.debounce(() => map.resize(),100));
    resizer.observe(mapWrapper.current); 

      return () => {
      resizer.disconnect();
      map.remove();
    };
},[])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。