4

現在、Google マップの InfoBox プラグインを使用しています。残念ながら、厄介な問題に遭遇しました。

私のアプリのユーザーは、対応するマーカーにカーソルを合わせると、InfoBox を開くことができます。それはうまくいきます。この問題は、InfoBox が開いていて、ユーザーがその上にマウスを置いているときに発生します。何らかの理由で、InfoBoxの下のマーカーがマウスオーバー イベントを発生させています。これは、マウスオーバー イベントを発生させたばかりのマーカーに属するボックスを開く前に、現在のボックスを閉じるため、大きな問題です。いくつかの検索を行ったところ、各マーカーを次のように設定していることがわかりました。

optimized: false

このバグを防ぎます。ただし、このオプションを使用するとマップが遅くなり、使いにくくなります。

私の情報ボックス:

infoWindows[obj.VehicleName] = new InfoBox({
    content: contentString,
    disableAutoPan: false,
    maxWidth: 500,
    pixelOffset: new google.maps.Size(-250, -490),
    boxStyle: {
         width: "500px"
    },
    enableEventPropagation: false,
    infoBoxClearance: new google.maps.Size(45, 1)
});

私の聞き手:

google.maps.event.addListener(marker, 'mouseover', function() {
4

1 に答える 1

3

宣伝されているオプション (enableEventPropagation) がどれも機能していないように見えたため、醜い修正を行いました (そして、300 以上のマーカーで「optimized:false」を使用するルートをたどりたくなかったのは確かです)。

各マーカーのマウスオーバー リスナー内で、現在開いている InfoWindow がホバーされているかどうかを確認します。

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

    //If an InfoBox is currently open
    if(openInfoBox !== null){

        var id = $(openInfoBox.getContent()).attr('id');
        //If the main div inside that InfoBox is currently being hovered over
        if ($('#' + id + ':hover').length) {
            return false; //go no further. i.e. ignore mouseover event for marker
        }

    }

    //Open InfoBox etc etc
于 2013-06-11T14:54:45.510 に答える