1

ユーザーがマップ上のポリゴンにカーソルを合わせるたびに、情報ウィンドウに動的データを表示しようとしています。デバッグは、データと他の情報ウィンドウ/ポリゴン設定がすべて正しいことを示しています。情報ウィンドウが表示されないだけで、マウスオーバーで色の変化を得ることができます。その背後にある理由は何ですか?ここで何が欠けていますか?

statePolygon = new google.maps.Polygon({
    paths: stateBorderCoords,
    strokeColor: '#f33f00', 
    strokeOpacity: 1, 
    strokeWeight: 1,
    fillColor: '#ff0000', 
    fillOpacity: 0.2
});

statePolygon.pId = infoText; // Fetching from a JSON response
statePolygon.wPet = wPet;    // Fetching from a JSON response
statePolygon.infoWindow = new google.maps.InfoWindow();

google.maps.event.addListener(statePolygon,"mouseover",function(event){
    this.setOptions({fillColor: "#00FF00"});
    this.infoWindow.setPosition(event.latLng);
    this.infoWindow.setContent(this.wPet);
    this.infoWindow.open(map, this);
});

google.maps.event.addListener(statePolygon,"mouseout",function(){
    this.setOptions({fillColor: "#FF0000"});
    this.infoWindow.close();
});

google.maps.event.addListener(statePolygon, 'click', function(){
    //createInfoWindow(this.pId);
});

statePolygon.setMap(map);
4

2 に答える 2

4

行の「this」を省略するとどうなりますか。

this.infoWindow.open(map, this);    

?

私はここ数日、似たようなものと戦ってきましたが、コードが google.maps.Markers (Google ピンのように) では機能するが、google.maps.Circles (そして google.maps.Polygons だと思います) では機能しないことを発見しました。

私の推測: InfoWindow をオブジェクトに固定しようとする "infoWindow.open(map, object)" は、円やポリゴンなどではなく、google.maps.Markers に対してのみ機能するようです。 )" これは何にも固定されません。ただし、infoWindow の位置は明示的に設定する必要があります (既に行っています)。

編集:

私の場合、これは機能しません(グローバル変数マップを想定)

var circle = { clickable: true,
               strokeColor: "darkred",
               strokeOpacity: 1,
               strokeWeight: 1,
               fillColor: "green",
               fillOpacity: 1,
               map: map,
               center: new google.maps.LatLng(55.95,-3.19),
               radius: 45
            };
var marker1 = new google.maps.Circle(circle);

infoWindow = new google.maps.InfoWindow();
infoWindow.setContent("Hello");
inoWindow.setPosition(new google.maps.LatLng(55.95,-3.19));
infoWindow.open(map,marker1);

しかし、これは:

var circle = { clickable: true,
               strokeColor: "darkred",
               strokeOpacity: 1,
               strokeWeight: 1,
               fillColor: "green",
               fillOpacity: 1,
               map: map,
               center: new google.maps.LatLng(55.95,-3.19),
               radius: 45
            };
var marker1 = new google.maps.Circle(circle);

infoWindow = new google.maps.InfoWindow();
infoWindow.setContent("Hello");
infoWindow.setPosition(new google.maps.LatLng(55.95,-3.19));
infoWindow.open(map);

唯一の違いは最後の行です。

上記の投稿を考えると、開いた後に位置を設定すると、おそらくアンカー位置が上書きされて表示されます。

于 2012-05-25T14:31:33.280 に答える
0

最初に InfoWindow を開き、その位置を設定します。

http://jsfiddle.net/fuDfa/

google.maps.event.addListener(statePolygon,"mouseover",function(event){
    this.setOptions({fillColor: "#00FF00"});
    this.infoWindow.setContent(this.wPet);
    this.infoWindow.open(map);
    this.infoWindow.setPosition(event.latLng);
});

ただし、マウスが InfoWindow の上に移動すると (ポリゴンの上にある場合でも)、マウスがポリゴンの外に移動したかのようにカウントされることに気付きました。そのため、ポリゴンが赤くなり、Infowindow が閉じます。ただし、マウスはまだポリゴン内にあるため、情報ウィンドウが再び開き、ちらつきが発生します。

これを回避する方法がわかりません(タイムアウトを試みましたが、信頼性もありません)。event.latLng の代わりに、事前設定された位置に Infowindow を配置することだけを考えました。

于 2012-05-25T14:20:48.700 に答える