2011-12-06 11 views
5

現在、Goole Maps APIをv2からv3にアップグレードするプロジェクトを進めています。問題が発生し、複数のリスナーを同じマーカーに登録できるかどうかの確認が必要です。 Goole Maps API v3がAPI v2のような同じマーカーで複数のリスナーをサポートするかどうかは誰でも確認できますか?GoogleマップApi V3 - 複数のリスナーを同じマーカーオブジェクトに割り当てる

サンプルコード:私はマーカーの上に置くと

var mapObject = document.getElementById('map_canvas'); 
var points = new Array(); 
var markers = new Array(); 

var mapOptions = { 
    zoom: 16, 
    center: new google.maps.LatLng(33.260081, -117.279369), 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    streetViewControl: false, 
    draggable: true, 
    scaleControl: false, 
    zoomControl: true,     
    panControl: true,      
    scrollwheel: false, 
    disableDoubleClickZoom: false, 
    navigationControlOptions: { 
    style: google.maps.NavigationControlStyle.ZOOM_PAN 
} 

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

points.push(lat:'33.260081', lng:'-117.279369'); 
points.push(lat:'33.260079', lng:'-117.279371'); 
points.push(lat:'33.260083', lng:'-117.279373'); 

for (var i in points) { 

    var point = points[i]; 

    var marker = initMarker(point); 

    markers.push(marker); 

    google.maps.event.addListener(marker, 'mouseover', function() { 
     alert('mouseover'); 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     alert('click'); 
    }); 

    google.maps.event.addListener(marker, 'mouseout', function() { 
     alert('mouseout'); 
    }); 

    bounds.extend(new google.maps.LatLng(point.lat, point.lng)); 
} 

、それは二回、次に「マウスオーバー」、「マウスアウト」で警告します。私は一度 'mouseover'と警告するだけです。

マーカーをクリックすると、「クリック」、「マウス出力」、「クリック」、「マウスオーバー」という警告が表示されます。私はそれがちょうど「クリック」を警告することを期待するでしょう。

「mouseover」と「mouseout」を無効にすると、「click」は期待どおりに機能します。そして、私は 'クリック'と 'mouseout'を無効にすると、 'mouseover'は期待どおりに動作します。

これらのイベントが互いに関連しているような理由はありますか? API v2では、この機能を問題なくサポートできました。

ありがとうございます。

- 編集 -

これが唯一のFirefoxとIEで何が起こっているように見える予想通り、Chromeはイベントを処理します。

- 編集 -

私は先に行っているとセットアップ2マップのデモは、サイド・バイ・サイドの比較 を行うことができます。

バージョン2 URL:http://map.ownij.com/index2.php

バージョン3 URL:http://map.ownij.com/

バージョン2のFirefox、IE、クロームでも、リスナーの行動:

  • マウスオーバー:マウスオーバー
  • クリック:クリック
  • マウスアウト:マウスアウト

バージョン3イベントリスナーの動作がでのFirefox、IE

  • マウスオーバー:マウスアウト、マウスオーバー、マウスオーバーは
  • クリック:クリック、マウスアウトは、クリック
  • マウスアウト:マウスアウト、マウスアウト

バージョンクロームで3でもリスナーの行動:

  • マウスオーバー:マウスオーバー
  • クリック:
  • マウスアウトをクリックしてください:あなたが見ることができるよう

をマウスアウト、v3のイベントの振る舞いとして働きますクロームに期待されるが、 FFとIEで、各イベントは 異常な動作につながる複数のリスナーをトリガします。

私たちは、マウスオーバーは マウスアウトイベントを発生ときに、泡がマーカーオフマウスを移動 ユーザーまで、無期限に再描画し、ユーザーがマーカーの上に置いたときに を表示されるようにマップのバブルを許可するように弊社の地図を建て。これが解決されるまで

我々は、現在の機能の そうでない場合は、私たちを奪うお客様に当社v3のアップグレードをリリースすることはできません。

- 編集 -

更新されたコードは、()の呼び出しをCONSOLE.LOGするアラートを変更することで、イベントは予想通り火。非インフォ画面コール(アラート、ebubbleなど)に関しては、異常なイベント処理があるようです。

+0

イベントモデルはブラウザによって若干異なります。私はこれを修正する方法を思い出していませんが、イベントをバブルアップする方法を一度読んでおいてください。 –

+0

@YzmirRamirez:残念ながら、これはイベントのバブルとは関係なく、ブラウザでは、無関係な誤解を取り除くためにアラートを出すことにしました。 –

+1

「アラート」の使用は避けてください。ポップアップは、マウスオーバー、マウスアウトなどの追加のイベントを引き起こす可能性があります - 'console.log'を使用してください。 –

答えて

1

ホバーリスナーを離れ、クリックリスナーに行くだけで終わりました。最終的にホバリング機能を元に戻すことができますが、今はそれを追跡する時間がありません。

1

おそらく、これらの追加のイベントはalertによって引き起こされます。 (今ではそれはしかし、インターネットエクスプローダで利用可能であるかどうかわからない)console.logを使用して、たとえば、マウスと相互作用しないように、イベントをログに記録してみてください。

簡単に言えば、私の推測では、ポップアップがあなたのマウスを「マウスアウト」(および「マウスオーバー」ポップアップ)を引き起こすということです。ポップアップが再び消えると、おそらく追加イベントが発生します。

+0

あなたは正しいです、私はconsole.log()に警告を変更し、イベントは期待通りに起動します。非インフォーワード・ウィンドウを使用すると、余分なイベントが発生するように見えます。私はそれをカスタマイズされたバージョンのebubbleプラグインで動作させようとしています。 –

+0

HTMLの中には実際にはマウスオーバーやマウスアウトなどのイベントが発生するはずなので、実際にはこれらの問題を回避することはできませんが、意図した意味で扱う必要があります。 。ただし、可能な解決策は、ポップアップレイヤー*をマップターゲットレイヤーの下に置くことです。イベントが予想どおりに機能するはずですが、ポップアップとのやりとりが壊れる可能性があります... –

+0

あなたが言っていることは意味があります。私が悩んでいるのは、v2のイベントリスナーが、カスタム情報ウィンドウ。 –