-1

我需要一个谷歌地图标记来响应由地图(空闲)触发的事件。该事件触发一个函数。这个函数应该作用于 Marker,但当然,“this”指的是地图。如何在函数内部引用设置事件侦听器的标记。

每个 Marker 都会向地图添加一个空闲侦听器。我可以跟踪所有标记,并在地图空闲事件中循环它们并触发该功能,但我希望使用更禅宗的方法。

我目前的方法是这样的:

var self=newMarker;
google.maps.event.addListener(window.gmap,'idle',function(){
    self.setVisible(false); });

但它似乎只适用于 1 个标记。“newMarker”是我试图从事件内部访问的标记对象,正如我所说的有多个标记,所以我不能只将它存储在全局变量或任何东西中。

4

2 回答 2

1

使用 jQuery 的“代理”,jQuery Proxy

于 2012-04-30T11:37:55.007 回答
0

我可以为您看到 2 个基本选项:

1 - 创建一个Array标记,实现一个function传递给addListener的标记,然后在事件触发函数回调时循环标记:

var markerList = new Array();
//build the markers and add them to markerList with multiple calls to push...
google.maps.event.addListener( window.gmap, "idle", function() {
    for ( var i = 0; i < markerList.length; i++ ) {
        markerList[i].setVisible( false );
    }
});

2 - 添加一个新的回调函数google.maps.Marker.prototype并多次调用addListener,以便每个标记接收自己的事件通知:

google.maps.Marker.prototype.idleCallback = function() {
    this.setVisible( false );
};

var newMarker1 = new google.maps.Marker( opts1 );
google.maps.event.addListener( window.gmap, "idle", newMarker1.idleCallback );
var newMarker2 = new google.maps.Marker( opts2 );
google.maps.event.addListener( window.gmap, "idle", newMarker2.idleCallback );
//and repeat for each marker; you get the idea

我自己,我总是选择选项 1,我坚持这种方法。我担心将许多侦听器附加到 Map 会降低性能。此外,它还涉及在 google 代码原型中乱搞。

但这是一个有趣的想法。如果你试一试这样的事情,请告诉我它是如何执行的以及它对你的效果如何。

于 2012-04-27T00:51:05.697 回答