【百度地圖API】如何給自定義覆蓋物添加事件

来源:https://www.cnblogs.com/shenpeng/archive/2018/05/21/9068740.html
-Advertisement-
Play Games

摘要: 給marker、lable、circle等Overlay添加事件很簡單,直接addEventListener即可。那麼,自定義覆蓋物的事件應該如何添加呢?我們一起來看一看~ 一、定義構造函數並繼承Overlay 二、初始化自定義覆蓋物 三、繪製覆蓋物 四、添加覆蓋物 五、給自定義覆蓋物添加事 ...


摘要:

  給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('滑鼠移上來了');
});

 

 

七、全部源代碼

複製代碼

自定義覆蓋物
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>自定義覆蓋物的點擊事件</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
</head>
<body>
<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>
</body>
</html>
<script type="text/javascript">
var map = new BMap.Map("container"); // 創建Map實例
var point = new BMap.Point(116.404, 39.915); // 創建點坐標
map.centerAndZoom(point,15); // 初始化地圖,設置中心點坐標和地圖級別。

//1、定義構造函數並繼承Overlay
// 定義自定義覆蓋物的構造函數 
function SquareOverlay(center, length, color){ 
this._center = center; 
this._length = length; 
this._color = color; 

// 繼承API的BMap.Overlay 
SquareOverlay.prototype = new BMap.Overlay();

//2、初始化自定義覆蓋物
// 實現初始化方法 
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; 
}

//3、繪製覆蓋物
// 實現繪製方法 
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"; 
}

//4、顯示和隱藏覆蓋物
// 實現顯示方法 
SquareOverlay.prototype.show = function(){ 
if (this._div){ 
this._div.style.display = ""; 


// 實現隱藏方法 
SquareOverlay.prototype.hide = function(){ 
if (this._div){ 
this._div.style.display = "none"; 

}

//5、添加其他覆蓋物方法
//比如,改變顏色 
SquareOverlay.prototype.yellow = function(){ 
if (this._div){ 
this._div.style.background = "yellow"; 

}

//6、自定義覆蓋物添加事件方法
SquareOverlay.prototype.addEventListener = function(event,fun){
this._div['on'+event] = fun;
}

//7、添加自定義覆蓋物 
var mySquare = new SquareOverlay(map.getCenter(), 100, "red"); 
map.addOverlay(mySquare);

//8、 為自定義覆蓋物添加點擊事件
mySquare.addEventListener('click',function(){
alert('click');
});
</script>

複製代碼

 

八、感謝大家支持!

原文鏈接:http://www.cnblogs.com/milkmap/archive/2011/10/20/2219149.html

 

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 公司的前端要給項目的webview加一個區分,用來區別是iOS端訪問、android訪問還是在瀏覽器訪問的,說是要加一個User Agent ,前端根據不同信息做適配,和我說來一頭霧水,後來經過開發同事的指導和在網上查閱資料,才有了點頭緒,在這裡和大家分享一下。 一、獲取UserAgent 最終得到 ...
  • 敏捷開發分為幾個不同的門派,如:Scrum,XBreed,極限編程(XP Extreme Programming)和水晶方法等。 參考資料:《iOS感測器應用開發最佳實踐》 ...
  • 一、為什麼Cookie需要防篡改 為什麼要做Cookie防篡改,一個重要原因是 Cookie中存儲有判斷當前登陸用戶會話信息(Session)的會話票據 SessionID和一些用戶信息 。 當發起一個HTTP請求,HTTP請求頭會帶上Cookie,Cookie裡面就包含有SessionID。 後端 ...
  • canvas是HTML5的新元素之一。使用canvas可以直接在HTML上進行圖形操作,所以它具有極大的應用價值。canvas元素本身不具有繪圖能力,它需要藉助JavaScript來實現繪圖功能。 canvas的限制: canvas繪製的圖形是靜態的,如果要讓所畫的圖形動起來,則需要畫出每一幀的圖形 ...
  • 需具備js基礎知識以及canvas相關方法(可查閱相關文檔) 下麵是一篇有關js與canvas的背景特效 基於面向過程的思維 ...
  • 1. 簡介 路由,工作原理與路由器相似(路由器將網線匯流排的IP分發到每一臺設備上),Vue中的路由根據用戶在網頁中的點擊,將其引導到對應的頁面。 2. 使用步驟 安裝vue-router或者直接引入vue-router.js(下載地址:https://router.vuejs.org/) 例:SPA ...
  • 什麼是 HTML? * HTML 超文本標記語言的縮寫(**H**yper **T**ext **M**arkup **L**anguage) * HTML 並不是編程語言,而是一種標記語言(markup language) * 標記 <英文單詞或者字母>稱為標記,一個HTML頁面都是由各種標記組... ...
  • jquery的.serializeArray()方法可以獲取形如以下 name value組成的對象數組,如果我們想得到key為name,value為value的json對象,則如下轉換: 但是這麼轉換有一個弊端,就是checkbox,覆選框有多個name相同的值,最後只留下了最後一個,如果想把覆選 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...