【问题标题】:Google Maps StreetView displays only the first time谷歌地图街景仅第一次显示
【发布时间】:2015-02-15 21:24:45
【问题描述】:

我有一个 google 地图页面,其中填充了数据库中的标记。在标记 InfoWindow 中是一个可点击的链接,它打开一个带有该位置 StreetView 的 jquery 对话框。 问题是,StreetView 仅在我第一次单击 InfoWindow 链接时显示。如果我关闭对话框并尝试再次打开它(单击其他信息窗口,甚至再次单击相同的信息窗口),我会得到带有 StreetView 控件的对话框,也会显示新地址(带有“地址是近似值”),但其余的对话框的颜色是统一的浅灰色。

我已经尝试了一些在 stackoverflow 上发布的变通方法(例如 this one),但在我的情况下灰色对话框仍然存在。

编辑:JSFiddle Example

使用 onclick 监听器创建标记:

function addMarker(feature) {
    var marker = new google.maps.Marker({
        position: feature.position,
        icon: icons[feature.type].icon,
        map: map
    });
    //Create Infowindow
    var infowindow = new google.maps.InfoWindow();
    var content = '<h1 id="Heading" class="Heading">' + feature.shopName + '</h1>' +
                  '<div id="iwcontent" class="iwcontent">'+
                  '<p><b>Naslov : </b>' + feature.shopAddress + '</br>' +
                  '<p><b>Telefon : </b>' + feature.shopTel + '</br>' +
                  '</div>'+
                  '<div id="iwsw" class="iwsw">StreetView</div>'
                  ;
    //Call StreetView
    google.maps.event.addDomListener(infowindow, 'domready', function () {
        $('.iwsw').click(function () {
            showStreetView(feature.position);
        });
    });
    .
    .
    .

showStreetView 函数:

//Display dialog with streetview
function showStreetView(position){
    var panoramaOptions = {position: position, pov: {heading: 34,pitch: 10}};
    var panorama = new  google.maps.StreetViewPanorama(document.getElementById("dialog-sw-canvas"), panoramaOptions);
    map.setStreetView(panorama);
    $( "#dialog-sw-canvas" ).dialog("open");
}

对话框定义:

$(function(){
    $('#dialog-sw-canvas').dialog({
        title: 'Street View',
        width: 1024,
        height: 768,
        closed: true,
        cache: false,
        modal: true,
        onClose: function(){
            $('#dialog-sw-canvas').empty();
        }
    });
});

一切都像魅力一样,但只有一次。

【问题讨论】:

  • 我的代码没有问题。您能否提供一个演示该问题的演示?
  • 如果在全景选项中添加visible:true 会怎样?尽管它可能很愚蠢,但我不会放弃它。
  • @amenadiel 试过了,但很遗憾,结果是一样的
  • @Dr.Molle 我已经将基本代码从 mysql/framework 中解耦出来了:link

标签: javascript jquery-ui google-maps-api-3


【解决方案1】:

打开对话框后触发全景图的resize-event,API将能够重新计算全景图的大小:

//Display dialog with streetview
function showStreetView(position){
    var panoramaOptions = {position: position, pov: {heading: 34,pitch: 10}};
    var panorama = new  google.maps
        .StreetViewPanorama(document.getElementById("dialog-sw-canvas"), panoramaOptions);
    map.setStreetView(panorama);
    $( "#dialog-sw-canvas" ).dialog("open");
    google.maps.event.trigger(panorama,'resize');
}

【讨论】:

  • 太棒了。像魅力一样工作。
  • 太棒了,我从来没想过!
  • 我正在使用基础对话框,不得不将其设置为超时:setTimeout(function(){ google.maps.event.trigger(panorama,'resize'); }, 1000); goo 解决方案! +1
猜你喜欢
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多