In Leaflet è possibile che il popup si apra al passaggio del mouse, non al clic?
Funziona solo per un marker alla volta, ma ne ho bisogno per un numero maggiore di marker:
marker.on('mouseover', function(e){
marker.openPopup();
});
In Leaflet è possibile che il popup si apra al passaggio del mouse, non al clic?
Funziona solo per un marker alla volta, ma ne ho bisogno per un numero maggiore di marker:
marker.on('mouseover', function(e){
marker.openPopup();
});
Risposte:
Se è necessario mostrare il popup per un marker, è possibile utilizzare il metodo marker bindPopup.
Quindi hai più controllo e verrà automaticamente associato al tuo marker.
Nell'esempio seguente puoi mostrare il popup quando l'utente passa il mouse sopra e nasconderlo quando l'utente esce dal mouse:
marker.bindPopup("Popup content");
marker.on('mouseover', function (e) {
this.openPopup();
});
marker.on('mouseout', function (e) {
this.closePopup();
});
Nota: è possibile che si verifichino problemi con la chiusura dei popup quando si passa con il mouse sul popup stesso, quindi potrebbe essere necessario regolare l'ancoraggio del popup in (vedere le impostazioni dei popup) per mostrare i popup un po 'più lontano dal marker stesso in modo che non scompare troppo facilmente.
Questo aiuterà a mostrare il popup al passaggio del mouse marker
marker.on('mouseover', function(e) {
//open popup;
var popup = L.popup()
.setLatLng(e.latlng)
.setContent('Popup')
.openOn(map);
});
Questo non è un problema specifico del volantino, ma piuttosto una questione di Javascript.
Conserva i tuoi marcatori in una raccolta, quindi associa openPopup
un 'mouseover'
evento a tutti.
Ad esempio, con un array:
var markers = getAllMarkers(); // up to you to implement, say it returns an Array<L.Marker>
for (var i = 0; i < markers.length; i++) {
var currentMarker = markers[i];
currentMarker.on('mouseover', currentMarker.openPopup.bind(currentMarker));
}
L.MarkerCluster
un'istanza ... La mia risposta mostra chiaramente come associare una raccolta di popup al passaggio del mouse. Se vuoi sapere come ottenere una raccolta da un cluster, questo è qualcos'altro.
Se stai usando Leaflet 1.3.x, la rilegatura dei suggerimenti è un metodo integrato.
http://leafletjs.com/reference-1.3.0.html#tooltip
var polyline = L.polyline([[StartLat, StartLong],[EndLat,EndLong]]).addTo(this.map);
polyline.bindTooltip("tool tip is bound");
bindTooltip()
funziona anche su singoli marker.
In termini di avere una soluzione che funziona "per un numero maggiore di marker", questo è quello che faccio per ogni livello di dati punto caricati da GeoJSON:
var layerPopup;
featureLayer.on('mouseover', function(e){
var coordinates = e.layer.feature.geometry.coordinates;
var swapped_coordinates = [coordinates[1], coordinates[0]]; //Swap Lat and Lng
if (map) {
layerPopup = L.popup()
.setLatLng(swapped_coordinates)
.setContent('Popup for feature #'+e.layer.feature.properties.id)
.openOn(map);
}
});
featureLayer.on('mouseout', function (e) {
if (layerPopup && map) {
map.closePopup(layerPopup);
layerPopup = null;
}
});