Firefox中的谷歌地图mouseevent显示不正确的坐标

时间:2015-06-04 18:51:34

标签: javascript google-maps firefox mouseevent

我有一个谷歌地图api页面,当地图div不在浏览器窗口的左上角(0,0)时,它不会从firefox中的鼠标事件返回正确的坐标。如果我在地图div上放置任何css填充或边距,谷歌地图中的mouseevent原点仍然从浏览器窗口的左上角开始,而不是地图div。 mouseevent在IE& Chrome返回正确的lat / lng而不是Firefox。有人有任何建议要纠正吗?

我在http://jsfiddle.net/fNPvf/15426/创建了一个非常简单的示例,它显示了鼠标在地图上移动时的坐标。您可以在地图图像的左上角看到坐标应为0,0但Firefox显示为50,50。 infowindow显示地图中心的正确纬度/经度,当您将鼠标移动到该点时,您可以看到坐标的差异(50像素向左上角移动)。

<html>
<head>
<meta charset="utf-8">
<style>
 body    {font:12px arial; margin:0px}
 #map {
    height:400px;
    width:400px;
}
</style>

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script>
    var map;
    coord = new google.maps.LatLng(38.939201, -94.747640)

    function initialize() {
        var mapOptions = {
            zoom: 16,
            center: coord
        };
        map = new google.maps.Map(document.getElementById('map'), mapOptions);

        google.maps.event.trigger(map, 'resize');

        var coordInfoWindow = new google.maps.InfoWindow();
        coordInfoWindow.setContent('38.939201, -94.747640');
        coordInfoWindow.setPosition(coord);
        coordInfoWindow.open(map);

        google.maps.event.addListener(map, "mousemove", function (event) {
            document.getElementById("footer").innerHTML = "Mouse X Y:" + event.pixel.toString() + " - Lat Lng:" + event.latLng.toString() + "<br />"
                });
     }

    google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map" style="margin-left:50px;margin-top:50px;"></div>
<div id="footer" style="margin-left:50px; padding:10px;"></div>
</body>
</html>

4 个答案:

答案 0 :(得分:1)

最新版本的FF v39出现问题。之前在v38.0.5中工作过。

答案 1 :(得分:1)

我可以确认,如果地图具有固定大小和64px边距,“Hello World!”,则会出现以下情况。只有当您将鼠标指针放在相对于标记的-64,-64位置时才会出现。看来在Maps中,指针位置相对于Firefox客户区左上角的地图元素的x / y偏移

此问题已在最近几天出现

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Simple markers</title>
    <style>
      #map-canvas
      {
        width: 640px;
        height: 480px;
        margin: 64px;
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
    <script>
function initialize() {
  var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
  var mapOptions = {
    zoom: 4,
    center: myLatlng
  }
  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'Hello World!'
  });
}

google.maps.event.addDomListener(window, 'load', initialize);

    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>

答案 2 :(得分:1)

<强>解决方案:

调用google maps api后添加参数 v = 3 。 user4974882提供的小提琴正在调用3.exp - 不起作用。

使用:

<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>

Live example

无法正常工作:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>

Live example

(来自user4974882的两个小提琴)

<强>背景

Firefox版本39出现问题.Mozilla团队实施了一些关于offsetX / Y的新功能(https bugzilla.mozilla.org/show_bug.cgi?id=69787)。不幸的是,谷歌地图API已经以某种方式解决了这个问题(https code.google.com/p/gmaps-api-issues/issues/detail?id=8278),所以 - 一旦FF39推出 - 问题就出现了。< / p>

答案 3 :(得分:0)

如上所述 - 这个错误随FF 39而来。

在您的示例中,将v=3.exp参数替换为v=3

所以它会是

src="https://maps.googleapis.com/maps/api/js?v=3"