изменить размер карты Google, сдвинув левый край - PullRequest
2 голосов
/ 23 июня 2011

Я хочу увеличить (или уменьшить) карту, когда пользователь нажимает кнопку.Карта отрегулирует свой левый край, переместив его влево, чтобы увеличить, оставив правый край в том же положении.Это в основном то, что делает сама Google Maps, когда вы нажимаете на виджет, чтобы увеличить карту (прикрывая левую боковую панель).

У меня нет проблем с изменением размера / перемещением div, содержащего карту, а затем вызывается google.maps.event.trigger (map, 'resize');Единственная проблема заключается в том, что, как и ожидалось, содержимое карты перемещается по экрану.Я не хочу этого, я хочу оставить карту в том же положении, как это делают карты Google.Другими словами, я хочу, чтобы позиция правого края по ширине в латах оставалась постоянной, поскольку правый край карты не изменяется.

Вызов map.getCenter (), а затем map.setCenter () неНе делай то, что я хочу, конечно (хотя это лучше, чем ничего не делать).map.panBy () может работать, так как она принимает свои аргументы в пикселях (по сравнению с широтой / долготой), но это оживит его, и это не то, что я хочу.

Есть идеи?Нужно ли делать преобразование широты / долготы в пиксели или есть более простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 04 июня 2012

Я думаю, это то, что вы хотели.

Я использовал пример Михала и добавил материал.

map Google Logo и Условия использования всегда отображаются.Вид остается в последней позиции, даже если боковая панель изменяется

http://jsfiddle.net/guy_regev/K39dE/3/

1 голос
/ 23 июня 2011

Хитрость заключается не в изменении размера карты, а в том, чтобы поместить маску на карту, которую вы создали (карта создается в максимальном размере), и просто переместить маску (элемент div).Карта всегда остается одинакового размера.Возможно, вам придется настроить положение других элементов управления на карте, таких как масштабирование и т. Д. (Что можно сделать с помощью стандартной карты API), или просто отобразить элементы управления с правой стороны.

Одна вещь, которую нужно сохранитьпомните, что эта карта будет иметь ограничивающую рамку, равную полноразмерной карте, поэтому, если вы добавляете маркеры на карту (и вы хотите, чтобы пользователь их видел), вам необходимо отслеживать ограничивающую рамку видимой в данный момент части карты (latLngпреобразование в пиксели) - так что вы можете прокручивать карту, если добавляете маркер на участок, покрытый маской.

Вот пример, выполненный с использованием анимации jquery (но вы можете добиться этого, просто отключив видимость боковой панели).,Еще одна важная вещь, которую стоит отметить - это 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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...