Панорамирование пузырьков - PullRequest
       8

Панорамирование пузырьков

0 голосов
/ 19 сентября 2018

есть ли способ панорамирования пузырька в текущем виде, когда есть области, которые находятся вне вида карты?

Например, https://dev2.gruppenunterkuenfte.de/nordrhein-westfalen__r187.html?vs=1

Вы можете нажать на пузырь на краюи вы видите их снаружи.

С помощью Google: https://www.gruppenunterkuenfte.de/nordrhein-westfalen__r187.html?vs=1

автоматически панорамируется в полном представлении ...

С уважением, Крис

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Спасибо большое, отлично работает!Я распространяюсь на случай, когда пузырь внизу находится снаружи:

...

                    // check, if infobubble isn't too far to up
                    if ((objRect.top-border)  < mapRect.top)  {
                        shiftY = (mapRect.top - (objRect.top-border));
                    } else {
                        if ((objRect.bottom+border) > mapRect.bottom) {
                            shiftY = -(objRect.bottom - (mapRect.bottom-border));
                        }
                    }

...

С уважением, Крис

0 голосов
/ 20 сентября 2018

Может быть недоступно из коробки, но можно сделать следующее, чтобы проверить при открытии пузыря и переместить центр карты.

    var checkBubble = function(evt) {
    setTimeout(function() {
        if(infoBubble && infoBubble.getState() == "open"){
            var border = 50;
            var objRect = infoBubble.getContentElement().parentElement.getBoundingClientRect();
            var objStyleRight = Math.abs(parseInt(infoBubble.getContentElement().parentElement.style.right));
            objStyleRight = objStyleRight ? objStyleRight : 0;

            var mapRect = map.getElement().getBoundingClientRect();
            var shiftX = 0;
            var shiftY = 0;

            // check, if infobubble isn't too far to up
            if ((objRect.top-border)  < mapRect.top)  {
                shiftY = (mapRect.top - (objRect.top-border));
            }

            // check, if infobubble isn't too far to the left
            var objLeft = (objRect.left - objStyleRight);
            if ((objLeft-border) < mapRect.left) {
                shiftX = (mapRect.left - (objLeft-border));
            } // check, if infobubble isn't too far to the right
            else if ((objRect.right+border) > mapRect.right) {
                shiftX = -(objRect.right - (mapRect.right-border));
            }


            if ((shiftX == 0) && (shiftY == 0)) {
                return;
            }

            var currScreenCenter = map.geoToScreen(map.getCenter());
            var newY = (currScreenCenter.y - shiftY);
            var newX = (currScreenCenter.x - shiftX);

             var newGeoCenter = map.screenToGeo(newX, newY);
             map.setCenter(newGeoCenter, true); 
        }


     }, 20);
}

map.addEventListener("mapviewchange",checkBubble);
...