Получить положение курсора мыши при наведении курсора на Маркер API Google Maps V3 - PullRequest
13 голосов
/ 02 июля 2011

Я пытаюсь сделать div видимым в позиции курсора, когда курсор наведен на маркер с помощью jQuery.Это что-то вроде всплывающей подсказки.Однако я не могу понять, как получить координаты X / Y точки под курсором.

Текущий код:

google.maps.event.addListener(marker, "mouseover", function(event) {

    $("#tooltip").css({
        position: "absolute",
        top: event.pageY,
        left: event.pageX
    }).toggle();

Я считаю, event не имеет свойств pageY и pageX, как в событии в jQuery.

Как получить указатель мыши?

Ответы [ 6 ]

21 голосов
/ 03 июля 2011

Это расширение моего предыдущего ответа, касающегося вычисления положений пикселей (Google maps API v3). Введите «глобальную» переменную overlay:

var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map); // 'map' is new google.maps.Map(...)

Используйте overlay в слушателе, чтобы получить проекцию и координаты пикселей:

google.maps.event.addListener(marker, 'mouseover', function() {
    var projection = overlay.getProjection(); 
    var pixel = projection.fromLatLngToContainerPixel(marker.getPosition());
    // use pixel.x, pixel.y ... (after some rounding)
}); 

Вы также можете взглянуть на projection.fromLatLngToDivPixel().

2 голосов
/ 16 февраля 2017

Вот решение, которое использует MouseEvent события click, но не полагается на доступ к нему через недокументированное свойство, которое может измениться в любое время, например, 'ub' или 'wb' (я думаю, что это 'ya' в настоящее время).

map.data.addListener('mouseover', function (e) {
    var keys = Object.keys(e);
    var x, y;
    for (var i = 0; i < keys.length; i++) {
        if (MouseEvent.prototype.isPrototypeOf(e[keys[i]])) {
            x = e[keys[i]].clientX;
            y = e[keys[i]].clientY;
        }
    }
});
1 голос
/ 16 сентября 2015

Это дает положение мыши, работает для меня.

function CanvasProjectionOverlay() { }

CanvasProjectionOverlay.prototype = new google.maps.OverlayView();
CanvasProjectionOverlay.prototype.constructor = CanvasProjectionOverlay;
CanvasProjectionOverlay.prototype.onAdd = function () { };
CanvasProjectionOverlay.prototype.draw = function () { };
CanvasProjectionOverlay.prototype.onRemove = function () { };

В вашей функции инициализации;

canvasProjectionOverlay = new CanvasProjectionOverlay();
canvasProjectionOverlay.setMap(map);

и используйте его вот так;

google.maps.event.addListener(marker, 'mouseover', function(event) { 
   var divPixel = canvasProjectionOverlay.getProjection().fromLatLngToContainerPixel(event.latLng);
   x = divPixel.x;
   y = divPixel.y;
}); 
1 голос
/ 27 августа 2015

Решение, которое работает для меня, более простое:

map.data.addListener('mouseover', function (event) {
    posX = event.ub.clientX;
    posY = event.ub.clientY;
});
1 голос
/ 02 июля 2011

Добавьте следующий код в функцию слушателя:

// to display a tooltip:
marker.setTitle("Hi");

// to get the geographical position:
var pos = marker.getPosition();
var lat = pos.lat();
var lng = pos.lng();
// ...
0 голосов
/ 26 сентября 2017
mapObject.marker.addListener("mouseover", (event) => {
  //USE THE COORDINATES HERE = { lat: event.latLng.lat(), lng: event.latLng.lng();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...