2015-11-19 3 views
1

У меня есть список маркеров, которые нужно отобразить на карте, но я хочу его по одному. В первый клик я хочу сделать новый маркер. Затем, когда я нажимаю на другое место, я хочу, чтобы мой маркер просто перешел к новому latLng, чтобы не создавать другой маркер. Вот мой код:Leafletjs: Как получить новый маркер в первый клик, затем обновить latlng маркера во втором клике

function (licon, coord, data) { 
    var self = jQuery(this); 
    var map = self.data("map"); 
    var latlng = new L.LatLng(coord[0], coord[1]); 
    //Create Marker 

    if (licon) { 
     var leafIcon = L.icon(licon); 
     console.log(typeof (marker)); 
     if (typeof (marker) === 'undefined') { 
      var marker = L.marker(latlng, { 
       icon: leafIcon, 
        "markerData": data, 
       draggable: true 
      }); 

     } else { 
      console.log('not undefined'); 
      map.removeLayer(marker); 
      marker = L.marker(latlng, { 
       icon: leafIcon, 
        "markerData": data, 
       draggable: true 
      }); 
     } 
    } else { 
     var marker = L.marker(latlng, { 
      "markerData": data, 
      draggable: true 
     }); 

    } 

    marker.addTo(map); 
    return marker; 
} 
+0

Если 'typeof (marker === 'undefined')' скорее будет 'typeof marker === 'undefined''? – ghybs

+0

уже отредактировал код –

+1

Я предполагаю, что вы вызываете свою функцию при каждом нажатии на карту? В этом случае ваш 'var marker' должен, вероятно, выходить за пределы этой функции, чтобы вы могли получить его при следующем вызове и проверить, является ли' undefined' или нет. Вы также можете быть заинтересованы в ['marker.setLatLng()'] (http://leafletjs.com/reference.html#marker-setlatlng), а не удалять маркер и добавлять новый. – ghybs

ответ

1

Быстрый пример результата: http://jsfiddle.net/ve2huzxw/43/

var currentMarker; 

map.on("click", function (event) { 
    if (currentMarker) { 
     currentMarker.setLatLng(event.latlng); 
     return; 
    } 

    currentMarker = L.marker(event.latlng, { 
     draggable: true 
    }).addTo(map).on("click", function() { 
     event.originalEvent.stopPropagation(); 
    }); 
}); 

document.getElementById("done").addEventListener("click", function() { 
    currentMarker = null; 
}); 

Вы также можете добавить плавный переход, чтобы показать маркер перехода на новую позицию:

if (currentMarker) { 
    currentMarker._icon.style.transition = "transform 0.3s ease-out"; 
    currentMarker._shadow.style.transition = "transform 0.3s ease-out"; 

    currentMarker.setLatLng(event.latlng); 

    setTimeout(function() { 
     currentMarker._icon.style.transition = null; 
     currentMarker._shadow.style.transition = null; 
    }, 300); 
    return; 
} 
+0

отлично работает с css transform :) Спасибо! – Christian