只有Dolphinaris
感謝的那些讓map
可見jQuery(document).ready
之外。
創建var markers = [];
數組。
當裝箱標記,自定義屬性name
添加到它,並推動到markers
數組:
var marker = new google.maps.Marker({
position: new google.maps.LatLng(21.0241839, -86.8148164),
map: map,
visible: true,
icon: ventura,
name: 'ventura',
});
markers.push(marker);
點擊之後,調用resetMap()
功能:
<a href="#" onclick="resetMap('21.0241839', '-86.8148164', 25, 'ventura');return false;">Ventura</a>
內resetMap
功能,設置center
和zoom
至map
,迭代markers
,通過自定義屬性匹配它們- 匹配一套可見,其他設置爲不可見。
function resetMap(lat, lon, zoom, name) {
var newPos = new google.maps.LatLng(lat, lon);
map.setCenter(newPos);
map.setZoom(zoom);
markers.forEach(function(marker) {
if(marker.get('name') == name)
{
console.log('match');
marker.setVisible(true);
}
else
{
marker.setVisible(false);
}
});
工作小提琴:https://jsfiddle.net/m9ugbc7h/1/
編輯:
問題:「?有沒有辦法順利地改變變焦和座標」
是,使用方法:
panTo(latLng:LatLng|LatLngLiteral)
更改地圖給定經緯度的中心。如果變化爲 小於地圖的寬度和高度,則過渡將爲平滑動畫的 。
https://developers.google.com/maps/documentation/javascript/reference?csw=1
編輯2:
實施panTo
很容易:
map.panTo(newPos);
代替:
map.centerTo(newPos);
但正如我所面臨的一個位「閃爍」由於隱藏/顯示標記是接近地圖上的效果,我已經添加在函數調用+標記物的一些延遲顯示/隱藏:
function resetMap(lat, lon, zoom, name) {
var newPos = new google.maps.LatLng(lat, lon);
$.when(map.setZoom(zoom)).done(function(){
$.when(map.panTo(newPos)).done(function(){
setMarkerVisibility(name);
});
});
}
並示出相匹配標記現在執行300毫秒的延遲:
function setMarkerVisibility(name){
markers.forEach(function(marker) {
console.log(marker.get('name'));
if(marker.get('name') == name)
{
setTimeout(function(){ marker.setVisible(true); }, 300);
}
else
{
marker.setVisible(false);
}
});
}
它看起來更平滑一些。
工作小提琴:https://jsfiddle.net/m9ugbc7h/3/
正是我需要的!謝謝,還有一個問題,有沒有什麼辦法可以平滑地改變縮放和座標? – Kossa1029
是的,使用'panTo'方法 - 請參閱我的編輯問題。 –
我正在嘗試這種方式,但它不工作,對我的無知抱歉,我與js和谷歌地圖新 map.setCenter(newPos); map.setZoom(zoom); map.panTo(latLng); – Kossa1029