首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平移气泡

平移气泡
EN

Stack Overflow用户
提问于 2018-09-19 23:44:26
回答 2查看 44关注 0票数 0

当有区域在地图视图之外时,是否有一种方法可以在当前视图中平移气泡?

例如,https://dev2.gruppenunterkuenfte.de/nordrhein-westfalen__r187.html?vs=1

您可以单击边缘的气泡,然后就可以看到外面的气泡。

使用谷歌:https://www.gruppenunterkuenfte.de/nordrhein-westfalen__r187.html?vs=1

将在完整视图中自动平移...

致敬Chris

EN

回答 2

Stack Overflow用户

发布于 2018-09-20 23:33:50

可能不是现成的,但在打开气泡和移动地图中心时,可以执行以下操作来检查。

代码语言:javascript
复制
    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);
票数 0
EN

Stack Overflow用户

发布于 2018-09-26 03:43:17

非常感谢,效果很好!我将扩展到气泡在外面底部的情况:

..。

代码语言:javascript
复制
                    // 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));
                        }
                    }

..。

致敬Chris

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52409677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档