<script type="text/javascript">
// 百度地圖API功能
var mp = new BMap.Map("allmap");
mp.centerAndZoom(new BMap.Point(104.072042, 30.663608), 15);
mp.enableScrollWheelZoom();
var geoc = new BMap.Geocoder();//逆地址解析
// 復雜的自定義覆蓋物
function ComplexCustomOverlay(point, text){
this._point = point;
this._text = text;
}
// 繼承API的BMap.Overlay
ComplexCustomOverlay.prototype = new BMap.Overlay();
// 實現初始化方法
ComplexCustomOverlay.prototype.initialize = function(map){
this._map = map;
var div = this._div = document.createElement("div");
div.style.position = "absolute";
div.style.zIndex = BMap.Overlay.getZIndex(this._point.lat);
div.style.backgroundColor = "#31CCB9";
div.style.border = "1px solid #31CCB9";
div.style.color = "white";
div.style.height = "18px";
div.style.borderRadius = "5px";
div.style.padding = "2px 5px";
div.style.lineHeight = "18px";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.fontSize = "12px"
var span = this._span = document.createElement("span");
div.appendChild(span);
span.appendChild(document.createTextNode(this._text));
var that = this;
var arrow = this._arrow = document.createElement("div");
arrow.style.background = "url() no-repeat";
arrow.style.position = "absolute";
arrow.style.width = "11px";
arrow.style.height = "10px";
arrow.style.top = "22px";
arrow.style.left = "10px";
arrow.style.overflow = "hidden";
div.appendChild(arrow);
mp.getPanes().labelPane.appendChild(div);
return div;
}
// 實現繪制方法
ComplexCustomOverlay.prototype.draw = function(){
var map = this._map;
// 根據地理坐標轉換為像素坐標,並設置給容器
var pixel = map.pointToOverlayPixel(this._point);
this._div.style.left = pixel.x - parseInt(this._arrow.style.left) + "px";
this._div.style.top = pixel.y - 30 + "px";
}
//在調用聚合方法時會將會調用標注的getPosition方法
//獲取該覆蓋物的位置
ComplexCustomOverlay.prototype.getPosition = function () {
return this._point;
};
// 自定義覆蓋物添加事件方法
ComplexCustomOverlay.prototype.addEventListener = function (event, fun) {
this._div['on' + event] = fun;
}
//定義門店坐標
var data_info = [[104.102886, 30.635884, "順城南路25歲月5樓"],
[104.066869, 30.671199, "錦江城大街289號富國際7匯7樓"],
[104.090696, 30.666959, "半邊街94號A區5層"]
];
for (var i = 0; i < data_info.length; i++) {
//測試定位//開始自定義覆蓋物
var myCompOverlay = new ComplexCustomOverlay(new BMap.Point(data_info[i][0], data_info[i][1]), "學習店");
mp.addOverlay(myCompOverlay); // 將標注添加到地圖中
//顯示定位圖標
myCompOverlay.addEventListener("click", attribute); //覆蓋物點擊事件
}
//不使用覆蓋物,使用百度標注
var marker = new BMap.Marker(new BMap.Point(104.082042, 30.663608)); // 創建標注
mp.addOverlay(marker);
marker.addEventListener("click", attribute);
//attribute事件
function attribute(e) {
var p = e.target;
alert(myCompOverlay.getPosition().lng);
}
</script>
閉包沒做好,原來的代碼myCompOverlay 變量存儲的就是最后那個覆蓋物
改成下面的
for (var i = 0; i < data_info.length; i++) {
//測試定位//開始自定義覆蓋物
var myCompOverlay = new ComplexCustomOverlay(new BMap.Point(data_info[i][0], data_info[i][1]), "學習店");
mp.addOverlay(myCompOverlay); // 將標注添加到地圖中
//顯示定位圖標
myCompOverlay.addEventListener("click", createClickEvent(myCompOverlay)); //覆蓋物點擊事件
}
//不使用覆蓋物,使用百度標注
var marker = new BMap.Marker(new BMap.Point(104.082042, 30.663608)); // 創建標注
mp.addOverlay(marker);
marker.addEventListener("click", createClickEvent(marker));
function createClickEvent(overlay)
{
return function (e) {
var p = e.target;
alert(overlay.getPosition().lng)
}
}
或者e事件就包含了point信息
alert(e.point.lng)
alert(e.point.lat)