2010-10-05 86 views
94

地圖標記的默認Google地圖InfoWindow非常圓。我如何創建一個帶方形角的自定義InfoWindow?Google地圖:如何創建自定義InfoWindow?

+0

我我一個鏈接到的東西,看起來相當定製的答案更新。你可以選擇你自己的半徑和其他設置。 – 2010-10-07 21:44:06

+0

[看看這個答案](http:// stackoverflow。com/a/7628522/881250)創建自定義信息框的另一個示例 – Donamite 2013-07-26 17:58:10

回答

2

我不確定FWIX.com是如何專門做的,但我敢打賭他們正在使用Custom Overlays

+0

自定義OVerlay是否具有與正常Google地圖標記相同的所有屬性?意思是,我仍然可以通過自定義覆蓋**來執行setIcon,setZIndex等**或**是否必須重新實現所有這些功能? – SarahBeale 2010-10-05 03:57:00

+0

不,自定義疊加層只允許在地圖上渲染的基本功能,如果你想setIcon,setZindex等,你將不得不自己實現它們。 – 2012-10-08 09:06:14

81

編輯一些狩獵周圍後,這似乎是最好的選擇:

https://github.com/googlemaps/js-info-bubble/blob/gh-pages/examples/example.html

你可以看到這個InfoBubble我對Dive Seven, a website for online scuba dive logging使用的定製版本。它看起來像這樣:


谷歌provide a demo,說明如何實現自定義信息窗口。它需要相當數量的代碼,但似乎非常簡單。


還有一些例子here。不過,它們絕對不像屏幕截圖中的示例那麼好看。

+1

@Tilly,謝謝。該項目轉移到GitHub。我更新了網址。 – 2016-05-21 13:57:17

1

你甚至可以附加在彈出的容器/畫布上自己的CSS類或你想怎樣。 當前谷歌地圖3.7彈出窗口樣式的元素,它代表彈出div容器的代碼。 因此,在谷歌地圖3.7,您可以進入通過彈出的domready中事件這樣的渲染過程:所以如果你想讓它在它的工作,follow this

var popup = new google.maps.InfoWindow(); 
google.maps.event.addListener(popup, 'domready', function() { 
    if (this.content && this.content.parentNode && this.content.parentNode.parentNode) { 
    if (this.content.parentNode.parentNode.previousElementSibling) { 
     this.content.parentNode.parentNode.previousElementSibling.className = 'my-custom-popup-container-css-classname'; 
    } 
    } 
}); 

element.previousElementSibling根本不存在IE8-。

check the latest InfoWindow reference事件以及更多......

我發現在某些情況下,最乾淨的。

16

可以修改使用jQuery獨自整個信息窗口...

var popup = new google.maps.InfoWindow({ 
    content:'<p id="hook">Hello World!</p>' 
}); 

這裏<p>元素將作爲一個鉤到實際的信息窗口。一旦domready觸發,該元素將變得活躍並且可以使用javascript/jquery訪問,如$('#hook').parent().parent().parent().parent()

下面的代碼只是在InfoWindow周圍設置了一個2像素邊框。

google.maps.event.addListener(popup, 'domready', function() { 
    var l = $('#hook').parent().parent().parent().siblings(); 
    for (var i = 0; i < l.length; i++) { 
     if($(l[i]).css('z-index') == 'auto') { 
      $(l[i]).css('border-radius', '16px 16px 16px 16px'); 
      $(l[i]).css('border', '2px solid red'); 
     } 
    } 
}); 

你可以做任何事情,比如設置一個新的CSS類或者只是添加一個新的元素。

與元素玩得到你所需要的...

+4

這是一個骯髒的黑客,可以隨時停止工作! – billy 2014-02-04 21:07:57

+1

破解 - 當然。天才 - 絕對! – 2014-04-07 23:39:27

+1

確實會在頁面中重複的元素的ID,這不是一個好習慣。 ID在頁面中應該是唯一的。 – 2014-12-01 17:46:45

5

樣式化的信息窗口與香草的javascript非常簡單。在寫這篇文章時,我使用了這個線程中的一些信息。我也考慮過早期版本的ie可能存在的問題(儘管我沒有對它們進行測試)。

var infowindow = new google.maps.InfoWindow({ 
    content: '<div id="gm_content">'+contentString+'</div>' 
}); 

google.maps.event.addListener(infowindow,'domready',function(){ 
    var el = document.getElementById('gm_content').parentNode.parentNode.parentNode; 
    el.firstChild.setAttribute('class','closeInfoWindow'); 
    el.firstChild.setAttribute('title','Close Info Window'); 
    el = (el.previousElementSibling)?el.previousElementSibling:el.previousSibling; 
    el.setAttribute('class','infoWindowContainer'); 
    for(var i=0; i<11; i++){ 
    el = (el.previousElementSibling)?el.previousElementSibling:el.previousSibling; 
    el.style.display = 'none'; 
    } 
}); 

的代碼創建信息窗口照常(無需插件,自定義疊加或巨大的代碼),使用一個div一個id持有的內容。這爲系統提供了一個鉤子,我們可以使用這個鉤子來獲取正確的元素來使用簡單的外部樣式表進行操作。

有一些額外的部分(並不是嚴格需要的),它們處理的事情就像給它一個關閉信息窗口圖像的div鉤。

最後一個循環隱藏指針箭頭的所有部分。我自己需要這個,因爲我想讓infowindow具有透明度,並且箭頭擋在了路上。當然,使用鉤子,更改代碼以用你選擇的PNG替換箭頭圖像應該也相當簡單。

如果你想改變它爲jquery(不知道爲什麼你會),那應該是相當簡單的。

我通常不是一個JavaScript開發,因此任何想法,意見,批評歡迎:)

+1

我不知道你是否聽說過,但有一些新的東西叫做「進入」和「空間」,當你在電腦上寫字時,它們實際上會產生空間。將代碼編寫爲代碼時通常很有用,所以您的眼睛不會因嘗試閱讀而流血:) – Chrillewoodz 2016-09-26 06:29:56

4

下面的代碼可以幫助你。

var infowindow = new google.maps.InfoWindow(); 
google.maps.event.addListener(marker, 'mouseover', (function(marker) { 
      return function() { 
       var content = address; 
       infowindow.setContent(content); 
       infowindow.open(map, marker); 
      } 
      })(marker)); 

這裏是一個文章< How to locate multiple addresses on google maps with perfect zoom>,幫助我實現了這一點。你可以參考它的工作JS小提琴鏈接和完整的例子。

2

您可以使用下面的代碼刪除樣式默認的inforwindow。後,您可以使用HTML代碼inforwindow:

var inforwindow = "<div style="border-radius: 50%"><img src='URL'></div>"; // show inforwindow image circle 
marker.addListener('click', function() { 
    $('.gm-style-iw').next().css({'height': '0px'}); //remove arrow bottom inforwindow 
    $('.gm-style-iw').prev().html(''); //remove style default inforwindows 
}); 
+0

刪除樣式默認的inforwindows - 現在是所有SO的最佳解決方案 – djdance 2016-12-18 20:00:17

0

我認爲最好的答案,我想出來的是在這裏: https://codepen.io/sentrathis96/pen/yJPZGx

我不能把信貸對於這一點,我分叉從另一個codepen用戶修復谷歌地圖的依賴,以實際加載的通話

請記到:

InfoWindow() // constructor 
相關問題