2011-02-01 12 views
7

başıma birini oluşturuyoruz çalışıyorum Poligonla veya poligonun başlangıç ​​veya bitiş düzenlemeyi desteklemiyor.Bir etkinlik listelemeyi kaldırmadan devre dışı bırakabilir misiniz? Google Maps API v3 beri

Her nokta için işaretçiler çiziyorum, sonra düzenlemeyi bitirmek için İlk dizin noktası ("0") tıklandığında gizlenecek tüm işaretleyiciyi ayarladıktan sonra poligonun tıklanabilire dönüştürülebileceğini ayarlayın. Ancak, kullanıcı haritayı hala tıklayabilir ve çokgen çizmeye devam edebilir. O olay listelerini devre dışı bırakmak istiyorum ancak fareyi yeniden etkinleştirmek istiyorum. Bu yapılabilir mi? Listeyi Kaldır'ı kullanırsam, başka bir listeyi mouseover üzerindeki poligona yeniden yerleştirebilirim böylece düzenleyebilirler?

MapShaper.Feature.prototype.poly = function(type) { 
    var color = MapShaper.getColor(false), 
    path = new google.maps.MVCArray, 
    poly, 
    self = this, 
    el = type + "_b"; 

    if(type=="shape"){ 
     poly = self.createShape({strokeWeight: 3, fillColor: color}, path); 
    }else if(type=="line"){ 
     poly = self.createLine({strokeWeight: 3, strokeColor: color }, path); 
    } 

    poly.markers = new google.maps.MVCArray; 

    google.maps.event.addListener(poly, "mouseover", function(){  
     poly.markers.forEach(function(polyMarker, index){ 
      polyMarker.setVisible(true); 
     }); 
    }); 

MapShaper.Feature.prototype.createShape = function(opts, path) { 
    var poly; 
    poly = new google.maps.Polygon({ 
     clickable:false, 
     strokeWeight: opts.strokeWeight, 
     fillColor: opts.fillColor 
    }); 
    poly.setPaths(new google.maps.MVCArray([path])); 
    return poly; 
} 

MapShaper.Feature.prototype.createShape = function(opts, path) { 
    var poly; 
    poly = new google.maps.Polygon({ 
     clickable:false, 
     strokeWeight: opts.strokeWeight, 
     fillColor: opts.fillColor 
    }); 
    poly.setPaths(new google.maps.MVCArray([path])); 
    return poly; 
} 


     google.maps.event.addListener(marker, 'click', function() { 
      if (!marker.index == 0) { 
       marker.setMap(null); 
       markers.removeAt(marker.index); 
       path.removeAt(marker.index); 
       MapShaper.reindex(markers);    
       if(markers.getLength() == 0){ 
        MapShaper.removeFeature(poly.id); 
       } 
      } else { 
       markers.forEach(function(marker, index) { 
        marker.setVisible(false) 
       }); 
       poly.setOptions({clickable: true}); 
      } 
     }); 

cevap

9
Sen gibi global değişkenle hemen hemen aynı şeyi yapabilir

böylece: ;

var disableListener = false; 
google.maps.event.addListener(marker, 'click', function() { 
    if (disableListener) 
     return; 
    if (!marker.index == 0) 
     marker.setMap(null); 
} 
+0

+1 çok güzel bir çözüm (ve set disableListener = true devre dışı bırakmak için) –

İlgili konular