Можно ли включить CTRL + перетаскивание для маркеров в Картах Google? - PullRequest
0 голосов
/ 28 сентября 2010

Я бы хотел, чтобы пользователь мог перетаскивать маркер только при нажатой клавише CTRLВозможно ли это?

1 Ответ

1 голос
/ 29 сентября 2010

Использование CTRL , ALT или SHIFT , вероятно, будет проблематичным, поскольку эти ключи используются браузерами для обозначения различных действий.Однако я попробовал следующий пример, привязав клавишу M , чтобы разрешить перетаскивание при нажатии:

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps - Drag Marker while Key is Pressed</title> 
   <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
   <div id="map" style="width: 400px; height: 300px;"></div> 

   <script type="text/javascript"> 

   var map = new google.maps.Map(document.getElementById('map'), { 
     mapTypeId: google.maps.MapTypeId.TERRAIN
   });
   var markerBounds = new google.maps.LatLngBounds();
   var markers = [];
   var i;

   var createKeyHandler = function (type, keycode) {
     return (function (e) {
       var keyPress;

       if (typeof event !== 'undefined') {
         keyPress = event.keyCode;
       }
       else if (e) {
         keyPress = e.which;
       }

       if (keyPress === keycode) {
         for (i = 0; i < markers.length; i++) {
           // while key is down, all markers are set to draggable = true
           if (type === 'down') {
             markers[i].setDraggable(true);
           }
           else {
             markers[i].setDraggable(false);
           }
         }
       }

       return false;   // Prevents the default action
     });
   };

   // Add 10 random markers on the map
   for (i = 0; i < 10; i++) {
     markers.push(new google.maps.Marker({
       map: map,
       draggable: false,
       position: new google.maps.LatLng( 39.00 + (Math.random() - 0.5) * 20, 
                                        -77.00 + (Math.random() - 0.5) * 20)
     }));

     markerBounds.extend(markers[markers.length - 1].getPosition());
   }

   // Adjust the map viewport to fit all the markers
   map.fitBounds(markerBounds);

   // Add event handlers for keydown and keyup
   document.onkeydown = createKeyHandler('down', 77);
   document.onkeyup = createKeyHandler('up', 77);

   </script> 
</body> 
</html>

Протестировано в Firefox 3.6 для Mac.Однако, похоже, что он не очень хорошо работает на Chrome, но я с оптимизмом настрою заставить его работать без особых усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...