【问题标题】:How do I change the mouse cursor when I mouseover on a particular area in Google Map v3?当我将鼠标悬停在 Google Map v3 中的特定区域时,如何更改鼠标光标?
【发布时间】:2010-04-01 01:48:38
【问题描述】:

使用 Google Maps API v3:当我将鼠标悬停在特定区域时如何更改鼠标光标?

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    是的,这可以通过在 MapOptions 中设置 draggableCursor 来实现,如下例所示:

    <!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>
    

    如果你运行上面的例子,一旦鼠标在红色矩形内移动,光标就会变成十字线。

    【讨论】:

    • 该示例由于某种原因不起作用,但当我在我的代码中尝试时,该代码确实有效!
    • 这个例子只是一张图片:)
    • 如果我使用多边形而不是折线怎么办? draggableCursor 不起作用..cursor 仍然是指针
    • 如果还有图片,考虑重新上传到imgur
    • @Daniel 不使用 ImageShack 的一个原因 - 你的图像消失了 :(
    【解决方案2】:

    建议将“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      相关资源
      最近更新 更多