2011-09-14 9 views
5

C'è un modo semplice per trascinare un indicatore di google maps all'esterno dell'area della mappa su un altro elemento dom in HTML. Ho provato molte cose e sembra che l'unico modo sia quello di hackerare e creare un marcatore duplicato in jQuery e farlo semplicemente passare il mouse sopra il marcatore corrente in modo che appaia che l'hai trascinato fuori dalla mappa.indicatore di trascinamento all'esterno della mappa nell'elemento html

qualsiasi suggerimento benvenuto!

Esempio Fiddle: http://jsfiddle.net/y3YTS/26/

want to drag the marker onto the red box

+0

perché im cerca la via più facile :) – duante

+0

jajaja bene Questo perché sto pensando a un modo semplice per realizzare questo, ma in qualche modo hai due ascoltatori, uno per il div della casella rossa, e il secondo modo, per la mappa div sapere quando il mouse vivo questo div ed entrare nel scatola rossa, ma non è facile, per fare le convalide e implementare i gestori di eventi sembra difficile almeno per me – Jorge

+0

questo è davvero vicino a essere fatto ... ho postato un dep domanda di endurance ... controlla il violino che ho quasi completato – duante

risposta

0

probabilmente avete già compiuto questo, ma solo nel caso in cui qualcun altro è alla ricerca, ecco un good starting place. Questa demo prende un segnalino che si trova fuori da una mappa e ti consente di rilasciarlo sulla mappa. Vuoi fare il contrario, ma il concetto è lo stesso. Prendi la posizione del mouse su MouseUp evento e quindi sostituire mappa del marcatore con una marcatore HTML in quel punto

4

Ecco la soluzione con il mod http://jsfiddle.net/H4Rp2/38/

var someData = [ 
    { 
     'name': 'Australia', 
     'location': [-25.274398, 133.775136] 
    }, 
    { 
     'name': 'La Svizra', 
     'location': [46.818188, 8.227512] 
    }, 
    { 
     'name': 'España', 
     'location': [40.463667, -3.74922] 
    }, 
    { 
     'name': 'France', 
     'location': [46.227638, 2.213749] 
    }, 
    { 
     'name': 'Ireland', 
     'location': [53.41291, -8.24389] 
    }, 
    { 
     'name': 'Italia', 
     'location': [41.87194, 12.56738] 
    }, 
    { 
     'name': 'United Kingdom', 
     'location': [55.378051, -3.435973] 
    }, 
    { 
     'name': 'United States of America', 
     'location': [37.09024, -95.712891] 
    }, 
    { 
     'name': 'Singapore', 
     'location': [1.352083, 103.819836] 
    } 
]; 















var gDrag = { 
    jq: {}, 
    item: {}, 
    status: 0, 
    y: 0, 
    x: 0 
} 


$(function(){ 

/*Google map*/ 
var mapCenter = new google.maps.LatLng(51.9226672, 4.500363500000049); 
var map = new google.maps.Map(
    document.getElementById('map'), 
    { 
     zoom: 4, 
     draggable: true, 
     center: mapCenter 
    } 
);  



    if(someData){ 

     gDrag.jq = $('#gmarker'); 

     /*LOOP DATA ADN CREATE MARKERS*/ 
     var markers = []; 
     for(var i = 0; i < someData.length; i++){ 

      markers.push(
       new google.maps.Marker({ 
        map: map, 
        draggable: false, 
        raiseOnDrag: false, 
        title: someData[i].name, 
        icon: 'http://icons.iconarchive.com/icons/aha-soft/standard-city/48/city-icon.png', 
        position: new google.maps.LatLng(someData[i].location[0], someData[i].location[1]), 

       }) 
      ); 

      //Block mouse with our invisible gmarker 
      google.maps.event.addListener(markers[i], 'mouseover', function(e){ 

       if(!gDrag.jq.hasClass('ui-draggable-dragging')){ 

        gDrag.item = this; 
        gDrag.jq.offset({ 
         top: gDrag.y - 10, 
         left: gDrag.x - 10 
        }); 


       } 
      }); 


     } 


     gDrag.jq.draggable({ 
      start: function(event, ui){ 
       console.log(gDrag.item.getIcon()) 
       gDrag.jq.html('<img src="'+gDrag.item.getIcon()+'" />'); 
       gDrag.item.setVisible(false); 
      }, 

      stop: function(event, ui){ 

       gDrag.jq.html(''); 

       /*Chech if targed was droped in our dropable area*/ 
       if(gDrag.status){ 
        gDrag.item.setVisible(false); 
       }else{ 
        gDrag.item.setVisible(true); 
       } 
      } 
     }); 

     $(document).mousemove(function(event){ 
      gDrag.x = event.pageX; 
      gDrag.y = event.pageY; 
     }); 



     $("#dropzone").droppable({ 
      accept: "#gmarker", 
      activeClass: "drophere", 
      hoverClass: "dropaccept", 
      drop: function(event, ui, item){ 
       gDrag.status = 1; 
       $(this).addClass("ui-state-highlight").html("Dropped!"); 
      } 
     }); 
    } 
}); 
+0

Sarebbe fantastico se lo rendessi una biblioteca, amico. –

Problemi correlati