Bing Maps InfoBox перемещает положение в FireFox и Chrome при перемещении карты - PullRequest
0 голосов
/ 02 ноября 2011

Я использую setHtmlContent для установки содержимого инфобокса. Согласно документации, infoBox изначально привязан в верхнем левом углу. Если я переместу карту (хотя бы чуть-чуть), информационный блок переместится. Это хорошо в IE8, но делает это в FireFox и Chrome.

Кто-нибудь имеет какие-либо идеи / опыт или какие-либо решения в решении этой проблемы?

Информационные поля добавляются следующим образом (для справки) ...

var infoboxOptions = { width: 300, height: 150, htmlContent: html, showCloseButton: true, zIndex: 99, offset: new Microsoft.Maps.Point(0, 0), showPointer: true, visible: false };
var location = new Microsoft.Maps.Location(pinArray[i].DPLat, pinArray[i].DPLong)
infobox = new Microsoft.Maps.Infobox(location, infoboxOptions);

А потом толкнул на карту.

Ответы [ 2 ]

1 голос
/ 27 сентября 2012

Кажется, что когда вы нажимаете инфобокс на карте, его смещение устанавливается по умолчанию.И когда mapView изменяется, он обновляется с правильным ((0,0), когда установлен htmlContent).

1 голос
/ 16 декабря 2011

У меня была такая же проблема в FF и Chrome.Исправление, которое я использовал, состояло в том, чтобы прослушать событие viewendchange и затем сбросить местоположение инфобокса при отправке события.Это работает в IE7, IE8, IE9, FF, Chrome и Safari.Не идеально, но работает.

function showInfoBox( event ) {
    var
        location = event.target.getLocation(), // event from pushpin click
        map = this.map, // my map reference
        _that = this
    ;

    // create the infobox
    var infoboxOptions = { width: 300, height: 150, htmlContent: html, showCloseButton: true, zIndex: 99, offset: new Microsoft.Maps.Point(0, 0), showPointer: true, visible: false };
    this._infoBox = new Microsoft.Maps.Infobox( location , infoboxOptions );
    map.entities.push( this._infoBox );

    // local function to reset our position
    function updateInfoboxLocation() {
        _that._infoBox.setLocation( location );
    }

    // reset only on new display of a box, this fixes the other issues of a user moving
    // the box and it being offset
    if( this._infoEventId ) Microsoft.Maps.Events.removeHandler( this._infoEventId );

    // listen for the end event, update location
    this._infoEventId = Microsoft.Maps.Events.addHandler(map, 'viewchangeend', updateInfoboxLocation);

    // center the view on the pin location
    map.setView( { center: location } );
}
...