Как изменить курсор мыши при наведении указателя мыши на определенную область в Google Map v3? - PullRequest
14 голосов
/ 01 апреля 2010

Использование API Карт Google v3. Как изменить курсор мыши при наведении курсора на определенную область?

Ответы [ 2 ]

26 голосов
/ 01 апреля 2010

Да, это возможно, установив draggableCursor в MapOptions, как в следующем примере:

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps v3 Change Cursor Demo</title> 
   <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
   <div id="map" style="width: 500px; height: 350px"></div> 

   <script type="text/javascript"> 
      var map = new google.maps.Map(document.getElementById("map"), { 
                                       mapTypeId: google.maps.MapTypeId.ROADMAP, 
                                       zoom: 8,
                                       center: new google.maps.LatLng(-34.3, 150.6) 
                                    });

      var ne = new google.maps.LatLng(-34.00, 150.00);
      var nw = new google.maps.LatLng(-34.00, 150.50);                              
      var sw = new google.maps.LatLng(-35.00, 150.50);
      var se = new google.maps.LatLng(-35.00, 150.00);

      var boundingBox = new google.maps.Polyline({
         path: [ne, nw, sw, se, ne],
         strokeColor: '#FF0000'
      });

      boundingBox.setMap(map);

      google.maps.event.addListener(map, 'mousemove', function(event) {
         if ((event.latLng.lat() > se.lat()) && (event.latLng.lat() < ne.lat()) &&
             (event.latLng.lng() > ne.lng()) && (event.latLng.lng() < sw.lng())) {
            map.setOptions({ draggableCursor: 'crosshair' });
         }
         else {
            map.setOptions({ draggableCursor: 'url(http://maps.google.com/mapfiles/openhand.cur), move' });
         }
      });
   </script> 
</body> 
</html>

Если вы запустите приведенный выше пример, курсор изменится на перекрестие после перемещения мыши внутри красного прямоугольника.

Курсор Google Maps Change http://img535.imageshack.us/img535/5923/mapcursor.png

2 голосов
/ 19 января 2012

Другие ответы, рекомендующие поместить слушателей 'mousemove' на весь объект карты, будут работать, но они ошибочны. Это «тяжелая работа» и плохая идея, поскольку такие слушатели могут сложиться в реальном приложении и в сочетании с другими событиями, происходящими на вашей карте, могут вызвать серьезные проблемы с производительностью и, возможно, непредвиденные условия гонки!

Лучший способ сделать это - использовать класс google.maps.Polygon. Это позволяет вам передавать серию объектов LatLng для создания многоугольника. Этот многоугольник отображается на карте и имеет атрибут наведения мыши по умолчанию «указатель», вы можете добавить слушатель «наведения мыши» к объекту, возвращенному из вызова класса new google.maps.Polygon.

Источник ниже взят из этого примера http://code.google.com/apis/maps/documentation/javascript/examples/polygon-simple.html

var myLatLng = new google.maps.LatLng(24.886436490787712, -70.2685546875);
var myOptions = {
  zoom: 5,
  center: myLatLng,
  mapTypeId: google.maps.MapTypeId.TERRAIN
};

var bermudaTriangle;

map = new google.maps.Map(document.getElementById("map_canvas"),
    myOptions);

var triangleCoords = [
    new google.maps.LatLng(25.774252, -80.190262),
    new google.maps.LatLng(18.466465, -66.118292),
    new google.maps.LatLng(32.321384, -64.75737)
];

bermudaTriangle = new google.maps.Polygon({
  paths: triangleCoords,
  strokeColor: "#FF0000",
  strokeOpacity: 0.8,
  strokeWeight: 3,
  fillColor: "#FF0000",
  fillOpacity: 0.35
});

bermudaTriangle.setMap(map);

Тогда я могу добавить слушателя вот так

google.maps.event.addListener(bermudaTriangle, 'mouseover', function() {
    map.setZoom(8);
});
//now if you mouse over the Polygon area, your map will zoom to 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...