在我的腳本中,當您將人員放到地圖上時,它會使用自定義小地圖加載街景視圖。你可以看到對手的小地圖,並將其移動到街景視圖,並且工作正常。街景視圖API 3(添加自定義小地圖)關閉按鈕街景視圖和Pegman
但是,當您單擊街景視圖上的關閉按鈕時,小地圖和街景視圖會很好地關閉,但是人員不會返回到其默認位置。它停留在地圖上,不能重新放置。
當街景視圖關閉時,我想要將人員移回到默認位置,並且如果您再次將其放置在地圖上以像第一次一樣加載街景視圖。
在線代碼http://jsbin.com/ayejim/edit#preview
這是我的功能initialize
:
function initialize() {
var lifestyle = [{}];
var myOptions = {
zoom: CITY_MAP_ZOOMING_FACT,
center: new google.maps.LatLng(CITY_MAP_CENTER_LAT, CITY_MAP_CENTER_LNG),
mapTypeId: google.maps.MapTypeId.<?php echo $maptype;?>
}
map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
map.setOptions({styles: lifestyle});
/////////////////////////////
var g = google.maps;
var pano, mini;
var mapdiv = document.getElementById("map_canvas");
pano = map.getStreetView();
/** Listen to panorama's visibility changes to detect
* when pegman is dropped onto the map
* and when Street view is closed
*/
g.event.addListener(pano, "visible_changed", function() {
// Street view activated by dropping pegman
if (!mini && pano.getVisible()) {
// Container for mini map and close button
var c = document.createElement("div");
c.id = "minimap";
c.style.visibility = "visible";
var d = document.createElement("div");
d.id = "closebutton";
d.onclick = function() {
// Toggles button icon and moves copyright notice
var terms = document.getElementById("note");
// var terms = mapdiv.childNodes[1].childNodes[2];
if (c.style.visibility == "visible") {
c.style.visibility = "hidden";
d.className = "closed";
terms.style.marginRight = "24px";
}
else {
c.style.visibility = "visible";
d.className = "";
terms.style.marginRight = "170px";
}
};
c.appendChild(d);
mapdiv.appendChild(c);
mapdiv.appendChild(d);
mini = new g.Map(c, {
center: pano.getPosition(),
zoom: 15,
mapTypeId: "roadmap",
disableDefaultUI: true,
streetViewControl: true,
streetView: pano,
styles: lifestyle
});
/** Moves the 'Terms' notice to the left
* to ensure it's not covered up.
* There are two such notices in the document.
* Make sure to catch the right ones.
*/
g.event.addListener(mini, "tilesloaded", function() {
var terms = mini.getDiv().firstChild.childNodes[2];
terms.style.marginRight = "24px";
var sv_terms = mapdiv.childNodes[1].childNodes[2];
sv_terms.id = "note";
sv_terms.style.marginRight = "170px";
sv_terms.style.zIndex = "1";
});
// Binds mini map's center to pano position
mini.bindTo("center", pano, "position");
// Street view finished by click on Street view close button
} else if (mini instanceof g.Map && !pano.getVisible()) {
mapdiv.removeChild(document.getElementById("minimap"));
**//initialize(); if try call initialize again pegman back default position but map back to default position too like the first time.and markers hide , i don't know why this happens**
}
});
/////////////////////////
mgr = new MarkerManager(map);
google.maps.event.addListener(mgr, 'loaded', function() {
if (markers) {
for (var level in markers) {
google.maps.event.addDomListener(document.getElementById(level), 'click', function() {
setCategoryVisiblity(this.id, this.checked);
});
for (var i = 0; i < markers[level].length; i++) {
var details = markers[level][i];
var image = new google.maps.MarkerImage(details.icons,new google.maps.Size(PIN_POINT_ICON_WIDTH, PIN_POINT_ICON_HEIGHT));
var myLatLng = new google.maps.LatLng(details.location[0], details.location[1]);
<?php if(get_current_city_set_zooming_opt() == '1') { ?>
multimarkerdata[i] = new google.maps.LatLng(details.location[0], details.location[1]);
<?php } ?>
markers[level][i] = new google.maps.Marker({
title: details.name,
position: myLatLng,
icon: image,
clickable: true,
draggable: false,
flat: true,
animation: google.maps.Animation.DROP
});
attachMessage(markers[level][i], details.message);
}
mgr.addMarkers(markers[level], 0);
}
<?php if(get_current_city_set_zooming_opt() == '1') { ?>
var latlngbounds = new google.maps.LatLngBounds();
for (var j = 0; j < multimarkerdata.length; j++)
{
latlngbounds.extend(multimarkerdata[ j ]);
}
map.fitBounds(latlngbounds);
<?php } ?>
mgr.refresh();
}
});
// but that message is not within the marker's instance data
function attachMessage(marker, msg) {
var myEventListener = google.maps.event.addListener(marker, 'click', function() {
if (pano.getVisible()) {
infowindow.open(pano, marker);
} else {
infowindow = new google.maps.InfoWindow(
{ content: String(msg)
});
infowindow.open(map, marker);
}
if (infowindow) infowindow.close();
infowindow = new google.maps.InfoWindow(
{ content: String(msg)
});
infowindow.open(map,marker);
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
這是一個很好的概念,我嘗試了一些想法,我發現谷歌搜索「sticky pegman」和「pegman reset」,特別是手動設置'map.getStreetView()。setVisible(false);'。它沒有工作:(至少我可以做的是留下一個正在運行的「演示」,讓其他人看到並嘗試解決你的問題。你必須做的是放置pegman,關閉街景,然後返回到地圖,注意pegman如何「禁用」,移動它不會重新打開一個新的街景,並且您不能將他放回到他的出發地點。** DEMO HERE ** http://jsbin.com/ayejim /編輯#預覽 –
謝謝莉莉亞娜,我在帖子中添加Demo,我希望有人能幫助我,這個概念很好,就像你說的 – Gustavo
看看這個莉莉安娜,http://jsfiddle.net/spiderplant0/fubNj/7 /此演示使用setVisible(false),並且當您將pegman放置到默認的現場街景視圖時,也可以停止,但我無法在我的腳本中使其工作 – Gustavo