我們有一個帶有標記的標準貼圖(MapTypeId.ROADMAP)。地圖上方是一個按鈕,顯示「顯示StreetView」。如果用戶點擊它,它會在標記的位置(在同一個div中)加載StreetView。該按鈕更改爲「隱藏街景視圖」,如果點擊,地圖將恢復爲標準ROADMAP。用戶也可以使用「pegman」來模擬相同的bahviour。Google MapsV3 StreetView問題 - 如果無法使用街景,則無法使用
問題出現在標記位置沒有可用的實際街景。我們使用事件監聽器處理此事件,如果沒有街景可用,則會顯示一條消息通知用戶,並返回false以防止「顯示」不存在的街景。工作很好,除非用戶試圖使用'pegman' - 因爲我們已經加載(但不顯示)街景(不在此處)。當用戶第一次放下地圖時,什麼都沒有發生,但我們的'顯示/隱藏按鈕'改變了。在第二滴pegman它改變了街景,但是我們的「顯示/隱藏按鈕」現在已經不起眼了(它已經在那裏顯示'show street view',並且在ROADMAP上顯示'隱藏街景'
我們嘗試更改我們的代碼結構 - streetview(var panorama = ...)僅通過'onclick'javascript函數初始化(它最初與'loadMap'函數捆綁在一起,現在它已與另一個函數分離)我們的顯示/隱藏按鈕 - 如果街景可用,對其進行很大的改變並改變按鈕,如果不返回false並向用戶顯示消息,這很好,但是現在如果用戶使用'pegman'去街景按鈕,不改變,因爲它已經被分離到另一個功能
我在我的白堊結束,三天嘗試各種選項,我無法弄清楚如何在'loadMap'函數中偵聽'通過pegman丟棄'更改爲streetview'(請參閱下的loadMap代碼中的'visible_changed'事件偵聽器) - 如果我能弄明白這一點,我可以改變按鈕的顯示方式,但是對於我而言,我無法弄清楚它(調查DOM變化以聽取街景的顯示,但不是非常「跨瀏覽器友好」,這對於站點非常重要每月點擊量超過400萬)。
這裏是「loadMap」功能
function loadGMap(lat, lng, nachladenAnzeigen, radialConflict){
// Create the Map variables
mapDiv = document.getElementById('map');
width = parseInt(mapDiv.style.width);
height = parseInt(mapDiv.style.height);
latlng = new google.maps.LatLng(lat, lng);
// Create Map
var mapOptions = {
zoom: 14,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
scrollwheel: false,
panControl: false
};
map = new google.maps.Map(mapDiv,mapOptions);
... Code here for laying marker to map...
google.maps.event.addListener(map, 'visible_changed', function(){
alert('please work');
// It doesn't - no alert when pegman is dropped :-(
}
// Check for a street view at the marker position
var streetViewCheck = new google.maps.StreetViewService();
streetViewCheck.getPanoramaByLocation(latlng, 50, function(result, status) {
if (status == google.maps.StreetViewStatus.ZERO_RESULTS) {
streetViewAvailable = 0;
}else{
streetViewAvailable = 1;
}
});
... more code (event listeners, ie, zoom changed, etc...
這是通過在顯示/隱藏街景按鈕地圖(不,我想你上面加入「onClick」行動稱爲loadStreetView功能會需要這個,這一切都爲這種使用情況做工精細,它不工作該死的衣夾下降,但你永遠不知道...)爲「visible_changed,用於」
function loadStreetView(){
// Make 'Show/Hide StreetView' links above the map work
// Handle the toggle of StreetView 'button' display
if(streetViewAvailable == 0){
noStreetViewVariable = document.getElementById('noStreetView');
noStreetViewVariable.style.display = "inline";
return false;
}else{
panorama = map.getStreetView();
panorama.setPosition(latlng);
panorama.setPov({
heading: 265,
zoom:1,
pitch:0
});
var toggle = panorama.getVisible();
if (toggle == false) {
panorama.setVisible(true);
$('#button_streetview').attr("src", 'img/buttons/mapview.png');
} else {
panorama.setVisible(false);
$('#button_streetview').attr("src", 'img/buttons/streetview.png');
}
}
google.maps.event.addListener(panorama, 'visible_changed', function(){
if(streetViewAvailable == 0){
$('#button_streetview').attr("src", 'img/buttons/mapview.png');
}
else if(streetViewAvailable == 1){
if (panorama.getVisible() == true) {
$('#button_streetview').attr("src", 'img/buttons/mapview.png');
}
}
});
google.maps.event.addListener(panorama, 'closeclick', function() {
$('#button_streetview').attr("src", 'img/buttons/streetview.png');
});
}
感謝您發佈此問題,它幫助我修復了一個愚蠢的錯誤 – user609306 2014-11-06 07:48:18