2011-09-14 36 views
5

Có cách dễ dàng để kéo điểm đánh dấu bản đồ google bên ngoài khu vực bản đồ lên một phần tử dom html khác không. Tôi đã thử tất cả mọi thứ và có vẻ như cách duy nhất là hack thông qua và tạo một điểm đánh dấu trùng lặp trong jquery và chỉ cần di chuột qua điểm đánh dấu hiện tại để nó xuất hiện bạn đã kéo nó ra khỏi bản đồ.kéo điểm đánh dấu bên ngoài bản đồ đến phần tử html

bất kỳ đề xuất nào được chào đón!

Ví dụ Fiddle: http://jsfiddle.net/y3YTS/26/

want to drag the marker onto the red box

+0

tại sao im tìm kiếm một cách dễ dàng :) – duante

+0

jajaja tốt đó là bởi vì tôi đang suy nghĩ một cách dễ dàng để thực hiện điều này nhưng bằng cách nào đó bạn có hai người nghe, một cho div của hộp màu đỏ, và cách thứ hai, cho bản đồ div để biết khi nào tôi sống div này và nhập vào hộp màu đỏ, nhưng nó không phải dễ dàng, để làm cho các xác nhận, và thực hiện xử lý sự kiện âm thanh khó khăn ít nhất cho tôi – Jorge

+0

điều này thực sự gần được thực hiện ... tôi đăng một dep câu hỏi cuối cùng ... kiểm tra fiddle tôi đã gần như hoàn thành – duante

Trả lời

0

Có thể bạn đã thực hiện điều này, nhưng chỉ trong trường hợp ai đó đang tìm kiếm, đây là một good starting place. Bản trình diễn này có một điểm đánh dấu nằm ngoài bản đồ và cho phép bạn thả nó trên bản đồ. Bạn muốn làm ngược lại, nhưng khái niệm là như nhau. Lấy vị trí chuột trên sự kiện mouseup và sau đó thay thế bản đồ của điểm đánh dấu với một dấu html ở chỗ đó

4

Đây là giải pháp với hack của bạn 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

Điều này sẽ thật tuyệt vời nếu bạn biến nó thành một thư viện, bạn đời. –

Các vấn đề liên quan