javascript - 通过移动左边缘来调整谷歌地图的大小

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

我想在用户单击按钮时放大(或缩小) map 。 map 将调整其左边缘,将其向左移动以变大,同时将右边缘留在同一位置。这基本上就是 google maps 本身所做的,当您单击小部件以放大 map (覆盖左侧栏)时。

我调整包含 map 的 div 的大小/重新定位没有问题,然后调用 google.maps.event.trigger( map ,“调整大小”); 唯一的问题是,正如预期的那样, map 的内容在屏幕上移动。我不想要那个,我想把 map 留在同一个位置,就像谷歌地图一样。换句话说,我希望右边缘的经纬度位置保持不变,因为 map 的右边缘不会改变。

当然,先调用 map.getCenter() 然后调用 map.setCenter() 并不能满足我的要求 (虽然总比什么都不做要好)。 map.panBy() 可能有效,因为它以像素为单位接受参数(相对于纬度/经度),但它会对其进行动画处理,这不是我想要的。

有什么想法吗?我是否必须将纬度/经度转换为像素,或者是否有更简单的方法来执行此操作?

最佳答案

诀窍不是调整 map 大小,而是在您创建的 map 上放置一个 mask ( map 以最大尺寸创建),然后移动 mask (一个 div)。 map 始终保持相同大小。您可能需要调整 map 上其他控件的位置,例如缩放等(这可以使用标准 map API 来完成)或仅在右侧显示您的控件。

要记住的一点是,该 map 将有一个等于全尺寸 map 的边界框,因此如果您向 map 添加标记(并且您希望用户看到它们),您需要跟踪 map 的边界框 map 的当前可见部分(latLng 到像素转换)- 如果您将标记添加到被掩码覆盖的部分,则可以滚动 map 。

这是一个使用 jquery 动画完成的示例(但您可以通过简单地关闭侧边栏的可见性来实现它)。 . 另一个需要注意的重要事项是用于包装器和侧边栏以及 map 容器的 CSS。... 享受:

<!DOCTYPE html>
<html>
    <head>
        <title>Resize map</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript">
            var map;
            var overlay;
            var sidebar_expanded = true;
            function initialize() {
                var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
                var myOptions = {
                    zoom: 4,
                    center: myLatlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                }
                map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

            }

            $(document).ready( function() {
                $("#hide").click( function(e) {
                    if (sidebar_expanded){
                        offset = "-=140";
                        text = "Show me"
                    } else {
                        offset = "+=140";
                        text = "Hide me"
                    }
                    $("#sidebar").animate({

                        left: offset,

                    }, 1000, function() {

                            // Animation complete.
                        //you probably want to change content of the hide me div to show me, etc)
                        $("#hide").text(text);
                        sidebar_expanded = (sidebar_expanded ) ? false : true;
                    });
                })
            })
        </script>
        <style>
            body {
                text-align: center;
            }
            #map_canvas {
                position: absolute;
                top: 0;
                left: 0;
            }
            #wrapper {
                position: relative;
                width: 900px;
                height: 500px;
                overflow: hidden;
            }
            #sidebar {
                position: absolute;
                top: 0;
                left: 0;
                width: 200px;
                height: 500px;
                background: white;
                z-index: 2000000;
                border: 1px solid black;
            }

        </style>
    </head>
    <body onload="initialize()">
        <div id="wrapper">
            <div id="sidebar">
                <div id="hide" style="text-align:right;padding: 6px;">
                    Hide me
                </div>
            </div>
            <div id="map_canvas" style="width:900px;height: 500px;">
            </div>
        </div>
    </body>
</html> 

关于javascript - 通过移动左边缘来调整谷歌地图的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6447138/

相关文章:

javascript - jQuery 当缩放改变 css 函数

javascript - 在 Meteor 中重用相同的 block 助手会导致奇怪的上下文问题

ios - 如何设置特定区域/区域选择 MapView

javascript - JQuery Mobile 在 Eclipse Blackberry 元素中不工作

javascript - 当列表中的值为空时如何显示自定义消息

javascript - 使用 JavaScript 在 Google map 中叠加多个图像

android - 计划策略 : set_timerslack_ns write failed: Operation not permitted

google-maps - 带有编码折线的 Google Static Maps API

javascript - 将街景控件(+ 上方的两个图标)添加到 Google map (v3)

javascript - 将 javascript 变量传递给 ruby​​ on rails Controller 以进一步发送 api