javascript - 谷歌地图标记,多个单独的事件

标签 javascript jquery html google-maps google-maps-api-3

我正在尝试做一些我似乎找不到以前有人做过的例子的事情,我需要一点帮助。

我正在尝试使用元素作为信息窗口的替代品。当您单击标记时,我希望显示一个 div 而不是信息窗口。

我已经知道如何让 div 出现,我只需要弄清楚如何将其与 Google map /标记事件联系起来。

我所知道的当前代码块;

google.maps.event.addListener(marker, 'click', (function(marker) {
  return function() {
    map.panTo(marker.getPosition());
    map.panBy(m_w_pan,0);
  }
})(marker));

处理 map 上的所有标记。如果我没记错的话,删除最后的 )(marker)); 会使代码仅引用一个标记,但我如何知道它与哪个标记相关/选择我想要的标记将事件绑定(bind)到?

使用标记数组(示例):

var memory = [
  ['A', 37.769587, -122.444344, 1],
  ['B', 37.769587, -122.454344, 2],
  ['C', 37.769587, -122.464344, 3],
  ['D', 37.769587, -122.474344, 4],
  ['E', 37.769587, -122.484344, 5]
];  

如何指定单击标记 A 时显示 div 1,单击标记 B 时显示 div 2,等等?

我希望这是有道理的。

谢谢!

编辑: 看来我的问题有点让人困惑,我会尽力简化它。 如何将事件添加到标记数组中的一个特定标记?这可能吗? 每个人都提到如何为数组中的所有标记创建信息窗口,我需要做的是针对一个特定标记。也许这会让这一点变得更清楚一些?我们拭目以待。

最佳答案

我创建了一个可能对您有帮助的脚本,让我尝试只为您提供可以使您的代码正常工作的脚本,看看我所做的是否可以帮助您。

我使用了以下脚本:

http://google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1.9/src/infobox.js

所以,假设您有一个标记数组,您将在 for 循环中对其进行迭代:

mapOptions = {
    zoom: 18,
    center: new google.maps.LatLng(youLat, yourLng),
    mapTypeId: google.maps.MapTypeId.SATELLITE,
    panControl: false,
    zoomControl: false,
    mapTypeControl: false,
    scaleControl: false,
    streetViewControl: false,
    overviewMapControl: false
};

map = new google.maps.Map(mapElementId, mapOptions);

ib = new InfoBox();

for (var i = 0; i < markers.length; i++) {

    var options = {
        content: markers[i].htmlContent,
        disableAutoPan: false,
        maxWidth: 0,
        pixelOffset: new google.maps.Size(100, 100),
        zIndex: null,
        closeBoxMargin: "-1000000px",
        closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif",
        infoBoxClearance: new google.maps.Size(1, 1),
        isHidden: false,
        pane: "floatPane",
        enableEventPropagation: false
    }

    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(markers[i].lat, markers[i].lng),
        map: map,
        icon: path/to/icon
    });

    google.maps.event.addListener(marker, 'click', function() {
        map.panTo(marker.getPosition());
        ib.setOptions(options);
        ib.open(map, this);
    });

}

markers[i].htmlContent 应该是您要设置到信息框的内容。让我知道这是否有效,我的脚本要复杂得多,我不想让您迷失其中,所以我隔离了可以帮助您的最重要的部分。这样,您将始终拥有 infoBox 对象的一个​​实例,并且对于每个标记,您可以更改该信息框将具有的选项。

关于javascript - 谷歌地图标记,多个单独的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434794/

相关文章:

javascript - 使用 jQuery 实用地测试特定事件处理程序(函数)是否绑定(bind)到对象的事件

javascript - React js 谷歌地图 react-google-maps-api 添加 StandaloneSearchBox

javascript - 通过 URL 主题标签更新选择菜单

HTML:将内容封装在一个框中

javascript - 此 html 代码的 DRY 一致性

javascript - 每当我调用保存方法时调用保存方法

java - 如何解析 JSDoc

php - 订阅 private-asdf 所需的 Pusher 私有(private) channel 身份验证信息

javascript - 使用 css 和 jquery 调整大小和装饰文本

javascript - jQuery.each : Do not add comma in last field