【问题标题】:FullscreenControl and Maintaining Map Center全屏控制和维护地图中心
【发布时间】:2016-10-26 10:03:04
【问题描述】:

目前,如果我说启用了 FullscreenControl 的适度大小的 Google 地图显示端口(300 像素 x 300 像素),并且我将小地图视图集中在特定区域,例如...法国... . 然后我点击全屏按钮以将显示扩展到我的屏幕边缘(1920 像素 x 1080 像素),法国被隐藏在我屏幕的左上角。

基本上,原始 300px x 300px 显示的左上角移动到我屏幕的左上角,世界地图的其余部分从该角以原始缩放级别延伸。

有什么方法可以基本上设置它,以便全屏显示打开时与原始显示具有相同的中心点,反之亦然,当全屏模式关闭时?

切换全屏按钮是否会触发事件或任何我可以将 setCenter 挂接到的事件?

【问题讨论】:

  • Crapachi,您在哪里可以找到答案? @anatoly.sukhanov 这个相关问题并没有说明如何 .getCenter() 在更改为/从 fullScreen 之前如何 .setCenter() 在更改为/从 fullScreen
  • @Emilio google.maps.Map.getCenter,然后是 google.maps.Map.setCenter 或 panTo
  • @anatoly.sukhanov 是的,但 fullscreenchange 事件仅在更改完成后触发,而不是之前。所以我可以 setCenter(),但不能 getCenter() ...
  • @Emilio 您可能必须通过跟踪 center_changed 事件来存储中心

标签: javascript google-maps google-maps-api-3


【解决方案1】:

我编写的代码有点奇怪,但效果很好:

<script>
    var map;
    var center = -1;
    var isFullScreen = false;
    function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
            zoom: 8,
            center: { lat: -34.397, lng: 150.644 }
        });
        center = { lat: map.getCenter().lat(), lng: map.getCenter().lng() };
        google.maps.event.addDomListener(map, 'bounds_changed', onBoundsChanged);
    }
    function onBoundsChanged() {
            var isFullHeight = $(map.getDiv()).children().eq(0).height() == window.innerHeight;
            var isFullWidth = $(map.getDiv()).children().eq(0).width() == window.innerWidth;
            if (isFullHeight && isFullWidth && !isFullScreen) {
                isFullScreen = true;
                map.setCenter(center);
                console.log('FULL');
            } else if (!isFullWidth||!isFullHeight){
                if (isFullScreen) {
                    map.setCenter(center);
                }
                isFullScreen = false;
                console.log('NOT-FULL');
            }
            center = { lat: map.getCenter().lat(), lng: map.getCenter().lng() };            
    }
</script>

我使用 bounds_changed 事件。

如果我检测到地图处于全屏状态,我会将地图设置在我在先前事件中注意到的中心,并将布尔值设置为 true。如果地图不是全屏,我检查布尔值是否为真,这意味着在之前的事件中地图是全屏的,所以我重新定位地图,然后检查布尔值是否为假。在活动结束时,我将中心保存在下一个活动的变量中。

这一切都不是很清楚...

您可以在 Stack Overflow 中咨询this 帖子。

注意: 如果您在 Web 应用程序的所有页面中显示单个地图,此代码将不起作用。我没有找到消除此错误的方法。非常感谢您的建议,谢谢。

另请注意: 我的代码受到了先例答案的启发。但是您可以找到相同的代码here。请注意,这不是重复的答案。我在其中添加了我自己的部分代码。

如果您有任何问题或 cmets,请告诉我。

【讨论】:

    【解决方案2】:

    试试这个

    /** To detect Map Full Screen event */
    google.maps.event.addListener( map, 'bounds_changed', onBoundsChanged ); //Event listener map bound change.
    var isMapFullScreen = false;
    var defaultLocation = {
        lat: 27.94,
        lng: -82.45
    };
    function onBoundsChanged() {
        if(!isMapFullScreen){
            var isFullHeight = $(map.getDiv()).children().eq(0).height() == window.innerHeight;
            var isFullWidth= $(map.getDiv()).children().eq(0).width()  == window.innerWidth;
            if (isFullHeight && isFullWidth) {
                isMapFullScreen = true;
                myMarker.setPosition(defaultLocation);
                map.setCenter(defaultLocation);
                console.log('FULL');
            } else {
               isMapFullScreen = false; 
               console.log('NOT-FULL');
            }
        }
    }
    

    【讨论】:

    • 我认为您不了解完整的问题。首先,您必须获得基本地图的中心(它可以改变地图位置的功能),然后将其重新定位为全屏。其次,如果您在所有网络应用程序(如 google.maps.com)中显示地图,您的脚本会检测到地图处于完整模式,但事实并非如此。
    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多