2013-07-09 4 views
0


Я пытаюсь создать карту и маркеры с всплывающими окнами на маркеры щелчка. Для этого я использую плакат-лист. Все работает нормально, за исключением того, что когда я нажимаю на какой-либо маркер, карта перемещается в какую-то точку, вместо того, чтобы фокусироваться на всплывающем маркере. Но если я изменяю размер браузера (например, восстанавливаю вниз или открываю консоль), тогда он будет работать нормально. У меня есть функция, чтобы получить HTML для всплывающего окна. Вот мой кодLeflet - Нежелательное движение по щелчка маркера

 var cloudmadeUrl = 'https://server/tiles/test_format5_set4/tiles_{z}_{y}x{x}.png',marker, 
     cloudmadeAttribution = '', latlng, 
     cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 4, attribution: cloudmadeAttribution}); 
     latlng = new L.LatLng(0, 0); 
     var LeafIcon = L.Icon.extend({ 
      options: { 
       iconSize:  [25, 41], // size of the icon 
       shadowSize: [50, 64], // size of the shadow 
       iconAnchor: [22, 94], ///point of the icon which will correspond to marker's location 
       shadowAnchor: [4, 62], // the same for the shadow 
       popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor 
      } 
     }); 
     var completedIcon = new LeafIcon({iconUrl: '../styles/images/marker-icon green.png'}); 
     var startedIcon = new LeafIcon({iconUrl: '../styles/images/marker-icon red.png'}); 
     var createdIcon = new LeafIcon({iconUrl: '../styles/images/marker-icon yellow.png'}); 
    map = new L.Map('table_map', {center : latlng, zoom : 1, layers : [cloudmade]}); 
    ticket_layer.clearLayers(); 
    map.removeLayer(ticket_layer); 
    for (var m in SOURCE_ARRAY) { 
       (function (n) { 
        if (SOURCE_ARRAY.hasOwnProperty(n)) { 
         createHtmlForPopUp(n, function (data) { 

          if (SOURCE_ARRAY[n].state.state === "created") { 
           marker = new L.Marker(new L.LatLng(SOURCE_ARRAY[n].location.x, SOURCE_ARRAY[n].location.y), {icon: createdIcon});  
          } 
          else if (SOURCE_ARRAY[n].state.state === "started") { 
           marker = new L.Marker([SOURCE_ARRAY[n].location.x, SOURCE_ARRAY[n].location.y], {icon: startedIcon}); 
          } 
          else { 
           marker = new L.Marker([SOURCE_ARRAY[n].location.x, SOURCE_ARRAY[n].location.y], {icon: completedIcon}); 
          } 
          marker.bindPopup(data); // calling a function with callback 
          ticket_layer.addLayer(marker); 
         }); 
        } 
       })(m); 
      } // for loop ends here 

     map.addLayer(ticket_layer); 
+0

вы можете создать http://jsfiddle.net для того же – dreamweiver

+0

я пытался, но он не работает в скрипку. [link] (http://jsfiddle.net/hPkG8/) тот, который я пробовал, но он дает ошибку из самого объекта Leaflet –

ответ

0

Пробовали ли вы поставить опцию autoPan ложь?

Docs.

+0

Да, это работает, но панорамирование - хорошая функция. –