googleMap не отображается


1 принят

В идеале вы передаете обратный вызов функции fadeIn для этого, но поскольку вы не можете этого сделать.

В качестве альтернативы вы можете это сделать.

«Быстрые» и «медленные» строки могут быть поданы для указания длительности 200 и 600 миллисекунд соответственно. Если добавлена ??какая-либо другая строка или если параметр длительности опущен, используется длительность по умолчанию 400 миллисекунд.

Вы можете добавить тайм-аут и выполнить setTimeout(function(){ googleMapApiLaunch(init_lng, init_lat); },650); // jquery slow takes 600ms после 600 мс.

    var init_lng = '{{ bien.longitude }}';
    var init_lat = '{{ bien.latitude }}';
    var marker;

    setTimeout(function(){
       googleMapApiLaunch(init_lng, init_lat);
    },650); // jquery slow takes 600ms

    function googleMapApiLaunch(lng, lat) {
        var longitude = $('#sbc_bienbundle_bien_longitude');
        var latitude = $('#sbc_bienbundle_bien_latitude');
        {% if bien.id != 0 %}
        longitude.val(lng);
        latitude.val(lat);
        {% else %}
        if (lat === init_lat && lng === init_lng) {
            longitude.val('');
            latitude.val('');
        } else {
            longitude.val(lng);
            latitude.val(lat);
        }
        {% endif %}
        lat = parseFloat(lat);
        lng = parseFloat(lng);
        //map..
        var map = new google.maps.Map(document.getElementById('map-canvas'), {
            center: {
                lat: lat,
                lng: lng
            },
            zoom: 14
        });
        // Create the search box and link it to the UI element.
        var input = document.getElementById('pac-input');
        var searchBox = new google.maps.places.SearchBox(input);
        map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
        var markers = [];
        // Bias the SearchBox results towards current map's viewport.
        google.maps.event.addListener(searchBox, 'places_changed', function () {
            var places = searchBox.getPlaces();
            if (places.length === 0) {
                return;
            }
            // Clear out the old markers.
            markers.forEach(function (iMarker) {
                iMarker.setMap(null);
            });
            markers = [];
            // For each place, get the icon, name and location.
            var bounds = new google.maps.LatLngBounds();
            places.forEach(function (place) {
                var icon = {
                    url: place.icon,
                    size: new google.maps.Size(71, 71),
                    origin: new google.maps.Point(0, 0),
                    anchor: new google.maps.Point(17, 34),
                    scaledSize: new google.maps.Size(25, 25)
                };
                // Create a marker for each place.
                markers.push(new google.maps.Marker({
                    map: map,
                    icon: icon,
                    title: place.name,
                    position: place.geometry.location
                }));
                if (place.geometry.viewport) {
                    // Only geocodes have viewport.
                    bounds.union(place.geometry.viewport);
                } else {
                    bounds.extend(place.geometry.location);
                }
            });
            map.fitBounds(bounds);
        });
        //marker..
        marker = new google.maps.Marker({
            position: {
                lat: lat,
                lng: lng
            },
            map: map,
            draggable: true
        });
        //dragend event of maker
        google.maps.event.addListener(marker, 'dragend', function () {
            //console.log(marker.getPosition());
            if (ismapped.is(':checked')) {
                longitude.val(marker.getPosition().lng());
                latitude.val(marker.getPosition().lat());
            }
        });
    }

Обновить JS

googleMapApiLaunch

3

Вы $(document).ready(function () { $('#page_content').fadeIn('slow', function() { googleMapApiLaunch(init_lng, init_lat); ); }); сразу же вызываете ... просто делайте это, когда fadeIn завершает:

$(document).ready(function () {
    $('#page_content').fadeIn('slow', function() {
        $(this).trigger("fadeInComplete");
    );
});

Обновление: поскольку вы не можете напрямую вызвать googleMapApiLaunch из вашего основного метода fadeIn, то вы можете инициировать событие оттуда. Затем у вас есть прослушиватель событий, который будет использоваться только на странице карты. например

$('#page_content').on('fadeInComplete', function () {
    googleMapApiLaunch(init_lng, init_lat);
});

А затем на вашей странице карты JS:

$(document).ready(function () {
    $('#page_content').fadeIn('slow', function() {
         var center = map.getCenter();
         google.maps.event.trigger(map, 'resize');
         map.setCenter(center);
    });
});

1

При попытке инициализации карты при скрытии div возникают некоторые проблемы. Итак, что вы можете сделать, когда анимация FadeIn закончена, запустите карту с помощью кода ниже:

map

Убедитесь, что mapпеременная объявлена ??после завершения анимации.


0

Привет, у меня была аналогичная проблема раньше, если вы тестируете ее в localhost, используйте что-то вроде ngrok

Это решит вашу проблему, потому что некоторые Apis, такие как карты google, не работают на localhost, необходимо использовать ngrok для работы

Посмотрим, сработает ли это для вас

$(document).ready(function () {
            $('#page_content').fadeIn('slow');
           $('#page_content').show();
         $('#displaymap').show(); 

        });
JavaScript, JQuery, Google-карты, FadeIn, Symfony-3,2,

javascript,jquery,google-maps,fadein,symfony-3.2,

0

Ответов: 4


1 принят

В идеале вы передаете обратный вызов функции fadeIn для этого, но поскольку вы не можете этого сделать.

В качестве альтернативы вы можете это сделать.

«Быстрые» и «медленные» строки могут быть поданы для указания длительности 200 и 600 миллисекунд соответственно. Если добавлена ??какая-либо другая строка или если параметр длительности опущен, используется длительность по умолчанию 400 миллисекунд.

Вы можете добавить тайм-аут и выполнить setTimeout(function(){ googleMapApiLaunch(init_lng, init_lat); },650); // jquery slow takes 600ms после 600 мс.

    var init_lng = '{{ bien.longitude }}';
    var init_lat = '{{ bien.latitude }}';
    var marker;

    setTimeout(function(){
       googleMapApiLaunch(init_lng, init_lat);
    },650); // jquery slow takes 600ms

    function googleMapApiLaunch(lng, lat) {
        var longitude = $('#sbc_bienbundle_bien_longitude');
        var latitude = $('#sbc_bienbundle_bien_latitude');
        {% if bien.id != 0 %}
        longitude.val(lng);
        latitude.val(lat);
        {% else %}
        if (lat === init_lat && lng === init_lng) {
            longitude.val('');
            latitude.val('');
        } else {
            longitude.val(lng);
            latitude.val(lat);
        }
        {% endif %}
        lat = parseFloat(lat);
        lng = parseFloat(lng);
        //map..
        var map = new google.maps.Map(document.getElementById('map-canvas'), {
            center: {
                lat: lat,
                lng: lng
            },
            zoom: 14
        });
        // Create the search box and link it to the UI element.
        var input = document.getElementById('pac-input');
        var searchBox = new google.maps.places.SearchBox(input);
        map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
        var markers = [];
        // Bias the SearchBox results towards current map's viewport.
        google.maps.event.addListener(searchBox, 'places_changed', function () {
            var places = searchBox.getPlaces();
            if (places.length === 0) {
                return;
            }
            // Clear out the old markers.
            markers.forEach(function (iMarker) {
                iMarker.setMap(null);
            });
            markers = [];
            // For each place, get the icon, name and location.
            var bounds = new google.maps.LatLngBounds();
            places.forEach(function (place) {
                var icon = {
                    url: place.icon,
                    size: new google.maps.Size(71, 71),
                    origin: new google.maps.Point(0, 0),
                    anchor: new google.maps.Point(17, 34),
                    scaledSize: new google.maps.Size(25, 25)
                };
                // Create a marker for each place.
                markers.push(new google.maps.Marker({
                    map: map,
                    icon: icon,
                    title: place.name,
                    position: place.geometry.location
                }));
                if (place.geometry.viewport) {
                    // Only geocodes have viewport.
                    bounds.union(place.geometry.viewport);
                } else {
                    bounds.extend(place.geometry.location);
                }
            });
            map.fitBounds(bounds);
        });
        //marker..
        marker = new google.maps.Marker({
            position: {
                lat: lat,
                lng: lng
            },
            map: map,
            draggable: true
        });
        //dragend event of maker
        google.maps.event.addListener(marker, 'dragend', function () {
            //console.log(marker.getPosition());
            if (ismapped.is(':checked')) {
                longitude.val(marker.getPosition().lng());
                latitude.val(marker.getPosition().lat());
            }
        });
    }

Обновить JS

googleMapApiLaunch

3

Вы $(document).ready(function () { $('#page_content').fadeIn('slow', function() { googleMapApiLaunch(init_lng, init_lat); ); }); сразу же вызываете ... просто делайте это, когда fadeIn завершает:

$(document).ready(function () {
    $('#page_content').fadeIn('slow', function() {
        $(this).trigger("fadeInComplete");
    );
});

Обновление: поскольку вы не можете напрямую вызвать googleMapApiLaunch из вашего основного метода fadeIn, то вы можете инициировать событие оттуда. Затем у вас есть прослушиватель событий, который будет использоваться только на странице карты. например

$('#page_content').on('fadeInComplete', function () {
    googleMapApiLaunch(init_lng, init_lat);
});

А затем на вашей странице карты JS:

$(document).ready(function () {
    $('#page_content').fadeIn('slow', function() {
         var center = map.getCenter();
         google.maps.event.trigger(map, 'resize');
         map.setCenter(center);
    });
});

1

При попытке инициализации карты при скрытии div возникают некоторые проблемы. Итак, что вы можете сделать, когда анимация FadeIn закончена, запустите карту с помощью кода ниже:

map

Убедитесь, что mapпеременная объявлена ??после завершения анимации.


0

Привет, у меня была аналогичная проблема раньше, если вы тестируете ее в localhost, используйте что-то вроде ngrok

Это решит вашу проблему, потому что некоторые Apis, такие как карты google, не работают на localhost, необходимо использовать ngrok для работы

Посмотрим, сработает ли это для вас

$(document).ready(function () {
            $('#page_content').fadeIn('slow');
           $('#page_content').show();
         $('#displaymap').show(); 

        });
JavaScript, JQuery, Google-карты, FadeIn, Symfony-3,2,