Карты Google: динамическое изменение размера информационного окна - PullRequest
4 голосов
/ 04 августа 2009

Как изменить размер информационного окна после его открытия? У меня есть гиперссылка внутри окна, которая генерирует AJAX-запрос; при обратном вызове я хотел бы изменить размер информационного окна.

Ответы [ 3 ]

4 голосов
/ 04 августа 2009

Проверьте следующее. Что происходит, что я создаю начальное информационное окно с минимальным информация (см. getInfoWindowHtml). Вызов gmap.openInfoWindowHtml обеспечивает обратный вызов, который вызывается после открытия информационного окна. В этом обратном вызове сделайте вызов ajax и сбросьте содержимое окна. Однако есть две проблемы:

Я не смог заставить окно изменить размер точно к возвращаемому контенту, поэтому я просто использовал стандартный размер (см. Новый GSize (300, 150) в анонимной функции, возвращаемой markerClickFn)

  1. В моем случае, если маркер находится вблизи крайностей границ изображения, части информационного окна будут обрезаны. IOW, карта не центрируется, чтобы включить информационное окно. Я, наверное, могу это исправить, но это не было насущной проблемой.

    function markerClickFn(venue, latlng) {
        return function() {
        var title = venue.Name;
            var infoHtml = getInfoWindowHtml(venue);
            // need to zoom in
            gmap.setZoom(13);
            gmap.openInfoWindowHtml(latlng, infoHtml,
                {
                    onOpenFn: function() {
                        var iw = gmap.getInfoWindow();
                        iw.reset(iw.getPoint(), iw.getTabs(), new GSize(300, 150), null, null);
                        $("#info-" + venue.Id.toString()).load("/Venue/MapInfoWindow/" + venue.Id);
                    }
                }
                );
    
        };
    }
    
    function getSidebarHtml(venue) {
        var url = "/Venue/Details/" + venue.Id; // actually should bring up infowindow
        var html = "<li id='venue-" + venue.Id + "'>\n";
        html = html + venue.Name + "\n";
        //html = html + "<p class='description'>" + trunc(venue.Description, 200) + "</p>\n";           
        html = html + "</li>";
        return html;
    }
    
    function getInfoWindowHtml(venue) {
        var url = "/Venue/Details/" + venue.Id; // actually should bring up infowindow
        var html = "<div id='info-" + venue.Id + "'><a href='" + url + "' class='url summary'>" + venue.Name + "</a></div>\n";
        return html;
    }
    
    function addVenueMarker(venue) {
        var icon = new GIcon(G_DEFAULT_ICON);
        icon.image = "http://chart.apis.google.com/chart?cht=mm&amp;chs=24x32&amp;chco=FFFFFF,008CFF,000000&amp;ext=.png";
    
        var latLng = new GLatLng(venue.Lat, venue.Lng);
        var marker = new GMarker(latLng, { icon: icon });
        var fn = markerClickFn(venue, latLng);
        GEvent.addListener(marker, "click", fn);
        marker.event_ = venue;
        marker.click_ = fn;
        venue.marker_ = marker;
        markers.push(marker);
        return marker;
    }
    
3 голосов
/ 10 ноября 2010

Похоже, что единственное решение, которое я нашел для динамического изменения размера InfoWindow, - это вызов метода setContent в InfoWindow. Вам нужно будет передать узел HTML или строку HTML. Это в основном перерисовывает InfoWindow. По сути, он закрывает текущий и открывает новый. Таким образом, он увидит мерцание во время перезагрузки контента. Этот вид отстой. Похоже, что Google устарел их v2 API и сделал вещи действительно трудно сделать в новой версии. Я думаю, что Google нанял группу разработчиков Sun Java через улицу в Силиконовой долине, и они, ребята, не знают, как предоставить простые в использовании API, такие как лагерь Microsoft. Действительно расстраивает!

2 голосов
/ 04 августа 2009

Невозможно анимировать изменение размера информационного окна, но есть функция reset . В документации сказано, что вы можете оставить любой параметр пустым, но если вы оставите параметр размера пустым, вы получите ошибку. Это означает, что вы должны указать размер InfoWindow.

Однако, поскольку это разрушает исходную точку динамического изменения размера окна, Я бы настоятельно рекомендовал просто закрыть исходное информационное окно и создать новое - что, в любом случае, будет делать функция сброса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...