Я пытаюсь отобразить всплывающее окно на карте Google, используя infobox и Gmaps.js, но окно не открывается при нажатии маркера?
Я пытаюсь отобразить всплывающее окно с помощью инфобокса, но инфобокс не открывается для карты. Я использую скрипт Gmaps.js. Карта отлично загружает контент, но проблема только с инфобоксом. вот мой код:
map = new GMaps({
div: '#gmap_geocoding',
lat: "20.5937",
lng: "78.9629",
zoom:5
});
var icon = {
url: "/img/marker/location-pointer.png", // url
scaledSize: new google.maps.Size(40, 40), // scaled size
origin: new google.maps.Point(0,0), // origin
anchor: new google.maps.Point(0, 0) // anchor
};
var infoBox;
var boxOptions = {
disableAutoPan: true,
alignBottom: true,
closeBoxURL: "",
maxWidth: 0, // no max
pixelOffset: new google.maps.Size(-140, -12),
infoBoxClearance: new google.maps.Size(1, 1)
};
infoBox = new InfoBox(boxOptions);
$results = $('#search-results').find('div.MapMarker');
$.each($results, function(key,value){
var lat = $(value).data('lat');
var lng = $(value).data('lng');
var name = $(value).data('name');
var sport = $(value).data('sport');
var image = $(value).data('image');
var contentString =
"<div class='infoWindow text-center'><h4><a href='{{ url('/activity/') }}/{{ $vendor->vendor_slug }}/{{ $vendor->activity_slug }}'>"+ name +"</a></h4><img src='"+ image +" 'class='img-responsive' style='width:220px; height:160px;'>"+
"<h5><strong>Sports:</strong> "+ sport + "</h5></div>";
var marker = map.addMarker({
lat:lat,
lng:lng,
icon: icon,
animation: google.maps.Animation.DROP,
title: name,
infoBox:{
content:contentString
}
});
});
1 ответ
Вам необходимо включить внешнюю библиотеку InfoBox (возможно, вы делаете это, но это не ясно из вашего вопроса).
Вам нужно добавить прослушиватель событий щелчка к маркеру, чтобы открыть InfoBox.
var marker = map.addMarker({
lat:lat,
lng:lng,
icon: icon,
animation: google.maps.Animation.DROP,
title: name,
click: function(evt) {
infoBox.setContent(contentString);
infoBox.open(map.map, marker);
},
infoBox:{ // probably not required
content:contentString
}
});
доказательство концепции скрипки
фрагмент кода:
var map;
map = new GMaps({
div: '#gmap_geocoding',
lat: "20.5937",
lng: "78.9629",
zoom: 5
});
var icon = {
url: "/img/marker/location-pointer.png", // url
scaledSize: new google.maps.Size(40, 40), // scaled size
origin: new google.maps.Point(0, 0), // origin
anchor: new google.maps.Point(0, 0) // anchor
};
var infoBox;
var boxOptions = {
disableAutoPan: true,
alignBottom: true,
closeBoxURL: "",
maxWidth: 0, // no max
pixelOffset: new google.maps.Size(-140, -12),
infoBoxClearance: new google.maps.Size(1, 1),
boxStyle: {
opacity: 0.75,
width: "280px",
backgroundColor: "white",
border: "black 1px solid"
}
};
infoBox = new InfoBox(boxOptions);
$results = $('#search-results').find('div.MapMarker');
$.each($results, function(key, value) {
var lat = $(value).data('lat');
var lng = $(value).data('lng');
var name = $(value).data('name');
var sport = $(value).data('sport');
var image = $(value).data('image');
var contentString =
"<div class='infoWindow text-center'><h4><a href='{{ url('/activity/') }}/{{ $vendor->vendor_slug }}/{{ $vendor->activity_slug }}'>" + name + "</a></h4><img src='" + image + " 'class='img-responsive' style='width:220px; height:160px;'>" +
"<h5><strong>Sports:</strong> " + sport + "</h5></div>";
var marker = map.addMarker({
lat: lat,
lng: lng,
// icon: icon,
animation: google.maps.Animation.DROP,
title: name,
click: function(evt) {
infoBox.setContent(contentString);
infoBox.open(map.map, marker);
},
infoBox: {
content: contentString
}
});
});
html,
body,
#gmap_geocoding {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gmaps.js/0.4.12/gmaps.min.js"></script>
<script src="https://cdn.rawgit.com/googlemaps/v3-utility-library/master/infobox/src/infobox.js"></script>
<div id="gmap_geocoding"></div>
<div id="search-results">
<div class="MapMarker" data-lat="20.5937" data-lng="78.9629" data-name="name" data-sport="baseball" data-image="http://images.clipartpanda.com/batter-clipart-silhouette_of_a_batter_swinging_a_baseball_bat_0515-0902-1110-5634_SMU.jpg" />
</div>