Хотя ваш код использует наложенный div, а не истинное пользовательское наложение , вы все равно можете добиться желаемого поведения, отключив pointer-events
в CSS для наложенного div
(в вашем случаеэто CSS для класса map-layer
).
Это позволяет вам "щелкнуть" по div
, который расположен над картой.
Пример с использованием кода скрипты:
var locations = [];
// Locations
locations = [
['1', 'Colliers Wood Station', 51.418187, -0.178096],
['2', 'Tandem Centre', 51.413675, -0.1772],
['3', 'Horatio Nelson Memorial', 51.413728, -0.192231]
];
function initialize() {
var mapOptions = {
scrollwheel: false,
draggable: true,
navigationControl: false,
mapTypeControl: false,
scaleControl: false,
streetViewControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP,
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var bounds = new google.maps.LatLngBounds();
var layer = `
<div class="map-layer">
<h6></h6>
</div>
`;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
title: locations[i][1],
position: new google.maps.LatLng(locations[i][2], locations[i][3]),
map: map
});
bounds.extend(marker.position);
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
$('#map-canvas').prepend(layer);
$('#map-canvas h6').text(locations[i][1]);
}
})(marker, i));
}
map.fitBounds(bounds);
var listener = google.maps.event.addListener(map, "idle", function() {
map.setZoom(14);
google.maps.event.removeListener(listener);
});
}
initialize();
#map-canvas {
width: 100%;
height: 300px;
}
.map-layer {
position: absolute;
pointer-events: none;
z-index: 1;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(255, 255, 255, .5);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<div id="map-canvas"></div>
Обратите внимание, что вы также можете включить pointer-events
для дочерних элементов, даже если они отключены для родительских элементов.