程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 百度地圖API-給自定義覆蓋物添加事件方法

百度地圖API-給自定義覆蓋物添加事件方法

編輯:關於PHP編程

本文章簡單的介紹了一下關於百度地圖的應用,這裡我介紹一個功能就是在自己定的層上給加個事件方法,有需要的參考一下。

給marker、lable、circle等Overlay添加事件很簡單,直接addEventListener即可。那麼,自定義覆蓋物的事件應該如何添加呢?我們一起來看一看~

-----------------------------------------------------------------------------------------一、定義構造函數並繼承Overlay
	  		 代碼如下		復制代碼	  	  		// 定義自定義覆蓋物的構造函數 
function SquareOverlay(center, length, color){
this._center = center;
this._length = length;
this._color = color;
}
// 繼承API的BMap.Overlay
SquareOverlay.prototype = new BMap.Overlay();
二、初始化自定義覆蓋物
	  		 代碼如下		復制代碼	  	  		
// 實現初始化方法  
SquareOverlay.prototype.initialize = function(map){
// 保存map對象實例
this._map = map;
// 創建div元素,作為自定義覆蓋物的容器
var div = document.createElement("div");
div.style.position = "absolute";
// 可以根據參數設置元素外觀
div.style.width = this._length + "px";
div.style.height = this._length + "px";
div.style.background = this._color;
// 將div添加到覆蓋物容器中
map.getPanes().markerPane.appendChild(div);
// 保存div實例
this._div = div;
// 需要將div元素作為方法的返回值,當調用該覆蓋物的show、
// hide方法,或者對覆蓋物進行移除時,API都將操作此元素。
return div;
}
三、繪制覆蓋物
	  		 代碼如下		復制代碼	  	  		
// 實現繪制方法  
SquareOverlay.prototype.draw = function(){
// 根據地理坐標轉換為像素坐標,並設置給容器
var position = this._map.pointToOverlayPixel(this._center);
this._div.style.left = position.x - this._length / 2 + "px";
this._div.style.top = position.y - this._length / 2 + "px";
}
四、添加覆蓋物
	  		 代碼如下		復制代碼	  	  		
//添加自定義覆蓋物  
var mySquare = new SquareOverlay(map.getCenter(), 100, "red");
map.addOverlay(mySquare);
五、給自定義覆蓋物添加事件1、顯示事件
	  		 代碼如下		復制代碼	  	  		
SquareOverlay.prototype.show = function(){  
if (this._div){
this._div.style.display = "";
}
}
添加完以上顯示覆蓋物事件後,只需要下面這句話,就可以顯示覆蓋物了。
	  		 代碼如下		復制代碼	  	  		
mySquare.show();
2、隱藏覆蓋物
// 實現隱藏方法  
 代碼如下 復制代碼 SquareOverlay.prototype.hide = function(){
if (this._div){
this._div.style.display = "none";
}
} 添加完以上code,只需使用這句話,即可隱藏覆蓋物。
mySquare.hide();
3、改變覆蓋物顏色
	  		 代碼如下		復制代碼	  	  		
SquareOverlay.prototype.yellow = function(){  
if (this._div){
this._div.style.background = "yellow";
}
}
上面這句話,是把覆蓋物的背景顏色改成黃色,使用以下語句即可生效:
mySquare.yellow();
“第五部分、給覆蓋物添加事件”小結:我們在地圖上添加了一個紅色覆蓋物,然後分別添加“顯示、隱藏、改變顏色”的事件。示意圖如下:\那麼,我們需要在html裡,先寫出map的容器,和3個按鈕。
	  		 代碼如下		復制代碼	  	  		
<div style="width:520px;height:340px;border:1px solid gray" id="container"></div>
<p>
<input type="button" value="移除覆蓋物" onclick="mySquare.hide();" />
<input type="button" value="顯示覆蓋物" onclick="mySquare.show();" />
<input type="button" value="變成黃色" onclick="mySquare.yellow();" />
</p>
然後,在javascript中,添加這三個函數:
	  		 代碼如下		復制代碼	  	  		
// 實現顯示方法  
SquareOverlay.prototype.show = function(){
if (this._div){
this._div.style.display = "";
}
}
// 實現隱藏方法
SquareOverlay.prototype.hide = function(){
if (this._div){
this._div.style.display = "none";
}
}

//改變顏色的方法
SquareOverlay.prototype.yellow = function(){
if (this._div){
this._div.style.background = "yellow";
}
}
 

六、如何給自定義覆蓋物添加點擊事件(這章重要!很多人問的)比如,我們給自定義覆蓋物點擊click事件。首先,需要添加一個addEventListener 的事件。如下:
	  		 代碼如下		復制代碼	  	  		
SquareOverlay.prototype.addEventListener = function(event,fun){
this._div['on'+event] = fun;
}
再寫該函數裡面的參數,比如click。這樣就跟百度地圖API裡面的覆蓋物事件一樣了。
	  		 代碼如下		復制代碼	  	  		
mySquare.addEventListener('click',function(){
alert('click');
});
同理,添加完畢addEventListener之後,還可以添加其他鼠標事件,比如mouseover。
	  		 代碼如下		復制代碼	  	  		
mySquare.addEventListener('mousemover',function(){
alert('鼠標移上來了');
});
七、全部源代碼
自定義覆蓋物
	  		 代碼如下		復制代碼	  	  		1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>自定義覆蓋物的點擊事件</title>
6 <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
7 </head>
8 <body>
9 <div style="width:520px;height:340px;border:1px solid gray" id="container"></div>
10 <p>
11 <input type="button" value="移除覆蓋物" onclick="mySquare.hide();" />
12 <input type="button" value="顯示覆蓋物" onclick="mySquare.show();" />
13 <input type="button" value="變成黃色" onclick="mySquare.yellow();" />
14 </p>
15 </body>
16 </html>
17 <script type="text/javascript">
18 var map = new BMap.Map("container"); // 創建Map實例
19 var point = new BMap.Point(116.404, 39.915); // 創建點坐標
20 map.centerAndZoom(point,15); // 初始化地圖,設置中心點坐標和地圖級別。
21
22 //1、定義構造函數並繼承Overlay
23 // 定義自定義覆蓋物的構造函數
24 function SquareOverlay(center, length, color){
25 this._center = center;
26 this._length = length;
27 this._color = color;
28 }
29 // 繼承API的BMap.Overlay
30 SquareOverlay.prototype = new BMap.Overlay();
31
32 //2、初始化自定義覆蓋物
33 // 實現初始化方法
34 SquareOverlay.prototype.initialize = function(map){
35 // 保存map對象實例
36 this._map = map;
37 // 創建div元素,作為自定義覆蓋物的容器
38 var div = document.createElement("div");
39 div.style.position = "absolute";
40 // 可以根據參數設置元素外觀
41 div.style.width = this._length + "px";
42 div.style.height = this._length + "px";
43 div.style.background = this._color;
44 // 將div添加到覆蓋物容器中
45 map.getPanes().markerPane.appendChild(div);
46 // 保存div實例
47 this._div = div;
48 // 需要將div元素作為方法的返回值,當調用該覆蓋物的show、
49 // hide方法,或者對覆蓋物進行移除時,API都將操作此元素。
50 return div;
51 }
52
53 //3、繪制覆蓋物
54 // 實現繪制方法
55 SquareOverlay.prototype.draw = function(){
56 // 根據地理坐標轉換為像素坐標,並設置給容器
57 var position = this._map.pointToOverlayPixel(this._center);
58 this._div.style.left = position.x - this._length / 2 + "px";
59 this._div.style.top = position.y - this._length / 2 + "px";
60 }
61
62 //4、顯示和隱藏覆蓋物
63 // 實現顯示方法
64 SquareOverlay.prototype.show = function(){
65 if (this._div){
66 this._div.style.display = "";
67 }
68 }
69 // 實現隱藏方法
70 SquareOverlay.prototype.hide = function(){
71 if (this._div){
72 this._div.style.display = "none";
73 }
74 }
75
76 //5、添加其他覆蓋物方法
77 //比如,改變顏色
78 SquareOverlay.prototype.yellow = function(){
79 if (this._div){
80 this._div.style.background = "yellow";
81 }
82 }
83
84 //6、自定義覆蓋物添加事件方法
85 SquareOverlay.prototype.addEventListener = function(event,fun){
86 this._div['on'+event] = fun;
87 }
88
89 //7、添加自定義覆蓋物
90 var mySquare = new SquareOverlay(map.getCenter(), 100, "red");
91 map.addOverlay(mySquare);
92
93 //8、 為自定義覆蓋物添加點擊事件
94 mySquare.addEventListener('click',function(){
95 alert('click');
96 });
97 </script> 八、感謝大家支持!
API常見問題總結貼:http://tieba.baidu.com/p/1147019448 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved