Skip to content

地图生命周期

开发者可以根据地图对象的生命周期,更好地管理地图对象的创建、使用和销毁,从而提高更好的用户体验和性能优化。本文介绍地图对象的生命周期,分为四个阶段:

  • 创建地图对象
  • 地图加载完成
  • 地图运行阶段
  • 销毁地图对象

创建地图对象

在创建地图对象阶段,可通过传入地图初始化参数来设置地图的初始状态。例如:中心点、地图视图模式等。

js
const map = new DiMap.Map({
	container: "container",
	zoom: 11, //地图级别
	center: [116.397428, 39.90923], //地图中心点
	style: "dimap://styles/normal" //设置地图的显示样式
})
ℹ️ 提示: 创建多个地图只需加载一次 JS API。通过增加多个 HTML 容器,可创建多个地图对象。
<div id="containerOne" style="width:500px; height:300px"></div>
<div id="containerTwo" style="width:500px; height:300px"></div>
// 创建多个地图对象
const mapOne = new DiMap.Map({ container: "containerOne", });
const mapTwo = new DiMap.Map({ container: "containerTwo", }); 

地图加载完成

地图加载完成后会触发complete事件,可以在这个事件中执行一些地图的其他操作,例如:添加覆盖物、绑定交互事件。根据需求,自动定位到某个城市或显示某些标记点等。

js
map.on('complete', function(){
  //地图图块加载完成后触发
});

地图运行阶段

运行阶段指地图对象加载完成后,地图对象销毁前。在这个阶段,可以对地图进行各种交互操作,例如:缩放、平移、搜索地点等。此外,还可以在地图上添加各种图层和标记,以提供更丰富的地理信息和交互体验。

js
//初始化地图
const map = new DiMap.Map({
	container: "container",
	style: "dimap://styles/normal"
})
//在运行阶段添加标记
const div = document.createElement("div")
const img = document.createElement("img")
div.style.width = "40px"
div.style.height = "40px"
img.style.width = "100%"
img.style.height = "100%"
img.src = "https://cdn0.iconfinder.com/data/icons/small-n-flat/24/678111-map-marker-128.png"
div.appendChild(img)

const marker = new DiMap.Marker({
 element: div,
 anchor: 'bottom-left',
 offset: [0, 0],
 draggable: true,
 rotation: 0,
 rotationAlignment: 'auto',
 pitchAlignment: 'auto'
})
marker.setLngLat([116.397411, 39.909186])
//将创建的标记添加到已有的地图实例:
marker.addTo(map)
//在运行阶段监听地图的点击事件
const clickHandler = function (e) {
  console.log('您在[ '+e.lngLat.toArray()+' ]的位置点击了地图!');
};
map.on("click", clickHandler);

销毁地图对象

不再需要地图或在页面切换时,应销毁地图对象以释放资源。调用map.remove()方法可销毁地图。在调用map.remove()方法之前,需要解绑地图上的事件。调用map.remove()方法后,将地图对象赋值为null,再清除地图容器的 DOM 元素,避免内存泄漏和性能问题。

js
//解绑地图的点击事件
map.off("click", clickHandler);
//销毁地图,并清空地图容器
map.destroy();
//地图对象赋值为null
map = null
//清除地图容器的 DOM 元素
document.getElementById("container").remove(); //"map" 为指定 DOM 元素的id