JSFiddle - React, Tailwind, and code Playground
by joshmoto
HTML
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<div class="acf-map" data-zoom="19" data-style="[
{elementType: 'geometry', stylers: [{color: '#242f3e'}]},
{elementType: 'labels.text.stroke', stylers: [{color: '#242f3e'}]},
{elementType: 'labels.text.fill', stylers: [{color: '#746855'}]},
{
featureType: 'administrative.locality',
elementType: 'labels.text.fill',
stylers: [{color: '#d59563'}]
},
{
featureType: 'poi',
elementType: 'labels.text.fill',
stylers: [{color: '#d59563'}]
},
{
featureType: 'poi.park',
elementType: 'geometry',
stylers: [{color: '#263c3f'}]
},
{
featureType: 'poi.park',
elementType: 'labels.text.fill',
stylers: [{color: '#6b9a76'}]
},
{
featureType: 'road',
elementType: 'geometry',
stylers: [{color: '#38414e'}]
},
{
featureType: 'road',
elementType: 'geometry.stroke',
stylers: [{color: '#212a37'}]
},
{
featureType: 'road',
elementType: 'labels.text.fill',
stylers: [{color: '#9ca5b3'}]
},
{
featureType: 'road.highway',
elementType: 'geometry',
stylers: [{color: '#746855'}]
},
{
featureType: 'road.highway',
elementType: 'geometry.stroke',
stylers: [{color: '#1f2835'}]
},
{
featureType: 'road.highway',
elementType: 'labels.text.fill',
stylers: [{color: '#f3d19c'}]
},
{
featureType: 'transit',
elementType: 'geometry',
stylers: [{color: '#2f3948'}]
},
{
featureType: 'transit.station',
elementType: 'labels.text.fill',
stylers: [{color: '#d59563'}]
},
{
featureType:...
CSS
html,
body,
.acf-map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px;
}
.hidden {
display: none;
}
JavaScript
function initMap($el) {
// Find marker elements within map.
var $markers = $el.find(".marker");
var mapArgs = {
zoom: $el.data("zoom") || 16,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControlOptions: {
mapTypeIds: [
'custom_map_style',
google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.SATELLITE
],
style: google.maps.MapTypeControlStyle.HORIZONTAL
}
};
var map = new google.maps.Map($el[0], mapArgs); // Add markers.
var customStyle = JSON.parse($('#map-styles').text());
// create the StyledMapType object
var customStyleMap = new google.maps.StyledMapType(customStyle, {
name: 'Custom Style'
});
// set the StyledMapType against the map
map.mapTypes.set('custom_map_style', customStyleMap);
map.setMapTypeId('custom_map_style');
map.markers = [];
$markers.each(function() {
initMarker($(this), map);
}); // Center map based on markers.
centerMap(map); // Return map instance.
return map;
}
function initMarker($marker, map) {
// Get position from marker.
var lat = $marker.data("lat");
var lng = $marker.data("lng");
var icon = $marker.attr("data-icon");
var latLng = {
lat: parseFloat(lat),
lng: parseFloat(lng)
}; // Create marker instance.
var marker = new google.maps.Marker({
position: latLng,
map: map,
icon: icon
}); // Append to reference for later use.
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()
}); // Open info window by default for a marker.
var openinfowindow = $marker.data("infowindow");
if (openinfowindow) {
infowindow.open(map, marker);
} // Show info window when marker is clicked.
google.maps.event.addListener(marker, "click", function() {
infowindow.open(map, marker);
});
}
}
function...