var mapObj = new AMap.Map('container', {
resizeEnable: true,
zoom: 5,
zooms:[4,18],
center: [106.485352, 34.603692]
});
//=======================================================
var createMarker = function(data,h) {
var div = document.createElement('div');//创建一个div
div.className = 'circle';//添加className
var r = Math.floor(data.count / 1024);
div.style.backgroundColor = h?'yellow':'blue';//区别颜色
div.innerHTML = data.count || 0;//标记框里面的内容是数据里面的count/0
var marker = new AMap.Marker({//创建一个标记对象
content: div,
title:data.name,
position: data.center.split(','),
offset: new AMap.Pixel(-50, 5),
zIndex: data.count//图层的层级
});
marker.subMarkers = [];//()
if(data.name==='北京市'||data.name==='河南省'){
marker.setLabel({content:'←请点击',offset:new AMap.Pixel(45,0)})//设置点标记文本标签内容
mapObj.setCenter(marker.getPosition());
}
if(!h){//()
marker.setMap(mapObj);//添加相关标记
}
//
if(data.subDistricts&&data.subDistricts.length){//数据里面存在sub属性执行
for(var i = 0 ; i<data.subDistricts.length;i++){
marker.subMarkers.push(createMarker(data.subDistricts[i],true));
}//( )
}
return marker;
};
//=======================================================================
//放大黄色标记显示部分
var _onZoomEnd = function(e) {//(点击时蓝色标记去除,黄色添加到地图里)
if (mapObj.getZoom() < 6) {
for (var i = 0; i < markers.length; i += 1) {
mapObj.remove(markers[i].subMarkers)//去掉外层标记
}
mapObj.add(markers);//添加地图覆盖物数组,数组为一个或多个覆盖物。
}
};
//缩小外层的标记消失
var _onClick = function(e) {
if(e.target.subMarkers.length){//数组里存在数据执行下面
mapObj.add(e.target.subMarkers);//外层数据标记到地图里面
mapObj.setFitView(e.target.subMarkers);//()
mapObj.remove(markers)
}
};
//==========================================================
//创建标记在地图上形成每个标记监听点击事件,最后再监听搜房事件(zommend缩放后)
var markers = []; //province见Demo引用的JS文件
for (var i = 0; i < provinces.length; i += 1) {
var marker = createMarker(provinces[i]);
markers.push(marker);
AMap.event.addListener(marker, 'click', _onClick);
};
mapObj.setFitView();
AMap.event.addListener(mapObj, 'zoomend', _onZoomEnd);
我想知道 marker.subMarkers.push(createMarker(data.subDistricts[i],true));这句话什么意思,它createMarker()为什么会在里面直接调用本身,然后这样做有什么目的,实习生希望能指点下,谢谢
这样写是考虑到data.subDistricts[]中可能会出现嵌套的情况,大概意思是河南省或北京市下的还有一些标记
你可以把这个data输出到控制台看一下具体数据