-1

マップ(アイドル)によってトリガーされたイベントに応答するには、Googleマップマーカーが必要です。イベントは関数をトリガーします。この機能はマーカーに作用することが想定されていますが、もちろん「これ」は地図を指します。関数内で、イベントリスナーを設定するマーカーを参照するにはどうすればよいですか。

すべてのマーカーは、アイドル状態のリスナーをマップに追加します。すべてのマーカーを追跡し、マップアイドルイベントでそれらをループして関数をトリガーすることができましたが、もっと禅の方法を望んでいました。

私の現在の方法はこれです:

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

しかし、それは1つのマーカーに対してのみ機能するようです。「newMarker」は、イベント内からアクセスしようとしているマーカーオブジェクトです。前述したように、複数のマーカーがあるため、グローバル変数などに格納することはできません。

4

2 に答える 2

1

jQueryの「プロキシ」であるjQueryプロキシを使用する

于 2012-04-30T11:37:55.007 に答える
0

私はあなたのために2つの基本的なオプションを見ることができます:

1-マーカーのを作成し、に渡されるArrayマーカーを実装し、イベントが関数コールバックを起動したときにマーカーをループします。functionaddListener

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を採用しており、そのアプローチに固執しています。多くのリスナーをマップに接続すると、パフォーマンスが低下するのではないかと心配しています。さらに、それはグーグルコードのプロトタイプをいじくり回すことを含みます。

しかし、これは興味深いアイデアです。このようなことを試してみたら、それがどのように機能し、どのように機能したかを教えてください。

于 2012-04-27T00:51:05.697 に答える