1

按照这个例子http://www.keypointpartners.com/test/mab/fromxml1.html和 Google Maps API v3 文档 (https://developers.google.com/maps/documentation/javascript/streetview) 我把从 XML 文件加载标记并为每个加载的标记显示选项卡式信息窗口的地图。为了检查一个位置是否真的有街景可用,我将我的 createMarker 修改为:

    函数 createMarker(latlng, 名称, html) {
      //var contentString = html;

      变量内容字符串 = [
        '',
        '',
        姓名,
        '',
        '',
          '
  • 本地化
  • ', '
  • 斯特鲁图拉
  • ', '
  • 沃利
  • ', //'
  • 奥普齐奥尼
  • ', '
  • 街景
  • ', '', html, '' ]。加入(''); // 创建一个标记 var 标记 = 新的 google.maps.Marker({ 位置:latlng, 标题:姓名, 地图:inc_map }); // 向标记添加一个侦听器以填充并打开信息窗口 google.maps.event.addListener(标记,“点击”,函数(){ infowindow.setContent(contentString); infowindow.open(inc_map,标记); google.maps.event.addListener(infowindow, 'domready', function() { inc_sv.getPanoramaByLocation(marker.position, 50, processSVData); //console.log("添加标签"); $('#tabs').tabs(); }); });

    getPanoramaByLocation 使用的 Tha 回调函数如下:

        函数processSVData(数据,状态){
          如果(状态 == google.maps.StreetViewStatus.OK){
            google.maps.event.addListener(infowindow, 'domready', function() {
              $('#stv-lnk').click(function() {
                var 全景选项 = {
                  位置:data.location.latLng,
                  可见:真实,
                  链接控制:假,
                  泛控制:假,
                  地址控制:假,
                  缩放控制选项:{
                    风格:google.maps.ZoomControlStyle.SMALL
                  },
                  启用关闭按钮:假
                };
                var 全景图 = 新 google.maps.StreetViewPanorama(document.getElementById(“stvpano”),panoramaOptions);  
                inc_map.setStreetView(全景);
              });
            });
            } 别的 {
            google.maps.event.addListener(infowindow, 'domready', function() {
              $('#stv-lnk').click(function() {});
              document.getElementById("stvpano").innerHTML = "Streetview non è disponibile per questo luogo"
              });
              }
        }
    
    

    现在,发生的情况是第一个街景选项卡不显示任何内容,而下一个单击的街景选项卡显示前一个选项卡的街景。与 API 文档中的上述示例相比,我为每个选项卡构建了一个单独的 StreetViewPanorama 对象(而该示例使用全局全景变量来保存它)。这是我的错吗?或者...?实际页面链接: http: //turom-mice.it/condorincentive/incentive.html

    非常感谢任何帮助/建议!干杯,皮疹*

    编辑:好的,我解决了其中一个问题。我嵌套了太多 eventListener:我删除了函数 processSVData 中的那些,现在每个 infowindow 都显示正确的街景。代码现在如下所示:

        函数processSVData(数据,状态){
          如果(状态 == google.maps.StreetViewStatus.OK){
            $('#stv-lnk').click(function() {
              var 全景选项 = {
                位置:data.location.latLng,
                可见:真实,
                链接控制:假,
                泛控制:假,
                地址控制:真,
                缩放控制选项:{
                  风格:google.maps.ZoomControlStyle.SMALL
                },
                启用关闭按钮:假
              };
              var 全景图 = 新 google.maps.StreetViewPanorama(document.getElementById(“stvpano”),panoramaOptions);
             inc_map.setStreetView(全景);
            });
           } 别的 {
            $('#stv-lnk').click(function() {
               inc_map.setStreetView(null);
               document.getElementById("stvpano").innerHTML = "Streetview non è disponibile per questo luogo"
            });
            }
        }
    

    现在,问题是“else”分支似乎什么都不做:当一个位置没有可用的街景时,你会看到最后显示的街景,无论我是否将其设置为 null 并在 div 中放置一些警告文本(我应该显示虽然链接到替代画廊页面)。问题是:这是正确的吗?或者...?

    像往常一样,任何帮助/提示/建议......

    Ciao,皮疹*

    编辑2:好的,完全解决了。else 分支没有管理单击事件,因此将其放回原处即可解决。上面的代码已经过编辑以反映解决方案。

    无论如何,谢谢,等待答案让我重新思考整个事情。希望这可以对任何人有所帮助。

    皮疹*

    4

    0 回答 0