2012-03-23 60 views
1

我所做的是我前往Google地圖中的位置(通過搜索或僅通過拖動地圖)。現在,我在地址欄中輸入另一個網址,然後按回車即可訪問該網站。瀏覽器後退按鈕跳轉到上一個位置(如maps.google.com)

當我使用瀏覽器的後退按鈕,谷歌地圖會自動切換回我最後的位置

如何做到這一點,如果我拖着地圖並沒有使用某種形式的「POST」的。在Google地圖網站上?我想在自己的Google谷歌地圖應用中擁有相同的行爲。

我使用谷歌地圖API爲JavaScript V3

回答

0

你只是看你的地圖上被稱爲「dragend」事件的第一

google.maps.event.addListener(map, 'dragend', function() { 

}); 

然後,你需要使用getCenter(讓你的座標)和重定向你的瀏覽器「#coordinates '當你使用散列時它不會重新加載你的窗口,但它會將它保存在歷史中。

coords = map.getCenter(); 
window.location = '#' + encodeURI(coords); 

現在,你需要添加監聽器來檢查的URL任何「散」的變化(假設你有jQuery的)

$(window).bind('hashchange', function() { 
    var hash = window.location.hash.slice(1); 
}); 

在你需要告訴你的地圖來改變座標結束解碼網址

hash = decodeURL(hash); 
map.panTo(hash); 

而不是啞劇(),你可以使用setCenter(),但它添加一些妮點擊後退按鈕,同時播放動畫。

這是很容易改變這種代碼與您所查找的地方工作,你可以使用事件「center_changed的」而不是「dragend」,它會處理一切。

一切我寫在這裏覆蓋:

https://developers.google.com/maps/documentation/javascript/reference#Map

希望這有助於你。

+0

謝謝 - 這聽起來像是一種合理的方法,我會盡快給出反饋意見。 – NoRyb 2012-03-26 08:32:51

+0

我開始認爲這樣做對我來說是一種非常不潔的方式。接下來的事情是,我必須存儲更多的座標,而且我不希望所有的東西在URL中都可見,並且也不需要書籤。 有趣的是,谷歌地圖也不使用Hashtags。我認爲它甚至不使用瀏覽器的歷史記錄。我不知道他們是如何做到這一點的...... – NoRyb 2012-03-26 11:18:18

+0

實際上,您不需要在散列中存儲座標,例如可以節省城市......在這個問題中,您可以在網站上生成的某處標記數組,所以你可以將你的哈希值引用到這個信息中... – Turek 2012-03-26 20:29:59

1

我不知道是否有GMaps此便捷方法,但一般這樣的功能是基於HTML5 history.pushState()它可以讓你添加自定義的步驟,瀏覽歷史和如果要處理更高級的應用程序狀態這樣

https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

,還有建立在它之上,例如,幾個框架:當用戶返回觀察Backbone routerLeviRoutes

在HTML4瀏覽器pushState可以是emulated with fragment identifiers(哈希URL)。

+0

感謝這一般的方法 - 我可能會用Turek指出的解決方案(和你在最後一句),但很好了解pushState()。 – NoRyb 2012-03-26 08:36:07