Support

Account

Home Forums Front-end Issues ACF Google Maps Rendering Reply To: ACF Google Maps Rendering

  • Alright, so I got what I wanted! Since I was using jQuery tabs on my page, I attached a click event to one of my tab links that loads the map. Now, it will only load the map when someone clicks that particular link/tab (which I’m okay with). So, on tab click, render map and resize to 100% width and height. Thank you @acf-support James for leading my in the right direction!

    Here is my updated code:

    <script type="text/javascript">
        (function($) {
        
        function render_map( $el ) {
        
            // var
            var $markers = $el.find('.marker');
        
            // vars
            var args = {
                zoom		: 16,
                center		: new google.maps.LatLng(0, 0),
                mapTypeId	: google.maps.MapTypeId.ROADMAP
            };
        
            // create map	        	
            var map = new google.maps.Map( $el[0], args);
        
            // add a markers reference
            map.markers = [];
        
            // add markers
            $markers.each(function(){
        
                add_marker( $(this), map );
        
            });
        
            // center map
            center_map( map );
    		
    		google.maps.event.addListenerOnce(map, 'idle', function(){
    			 google.maps.event.trigger(map, 'resize');
    			 center_map(map);
    		 });
    		 
        
        }
        
    	
        function add_marker( $marker, map ) {
        
            // var
            var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );
        
            // create marker
            var marker = new google.maps.Marker({
                position	: latlng,
                map			: map
            });
        
            // add to array
            map.markers.push( marker );
        
            // if marker contains HTML, add it to an infoWindow
            if( $marker.html() )
            {
                // create info window
                var infowindow = new google.maps.InfoWindow({
                    content		: $marker.html()
                });
        
                // show info window when marker is clicked
                google.maps.event.addListener(marker, 'click', function() {
        
                    infowindow.open( map, marker );
        
                });
            }
        
        }
        
        function center_map( map ) {
        
            // vars
            var bounds = new google.maps.LatLngBounds();
        
            // loop through all markers and create bounds
            $.each( map.markers, function( i, marker ){
        
                var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );
        
                bounds.extend( latlng );
        
            });
        
            // only 1 marker?
            if( map.markers.length == 1 )
            {
                // set center of map
                map.setCenter( bounds.getCenter() );
                map.setZoom( 16 );
            }
            else
            {
                // fit to bounds
                map.fitBounds( bounds );
            }
        
        }
        
        $(document).ready(function(){
            
    		$( ".mapclick" ).one( "click", function() {
    			//$('.mapclick').click(function(event) {			
              	$('.acf-map').each(function(){
    				render_map( $(this) );
    			});			
    			
    			$(window).resize(function() {
    				$('.acf-map').height($(window).height() - 170);
    			});
    				
    			$(window).trigger('resize');	
    		});
    
    		//$height = $('#wrapper').height();
        	//$('.acf-map').height($height);
    		
        
        });
    	
        })(jQuery);
        </script>