Как зарегистрировать клик по координате xy, который остается надежным независимо от дизайна страницы

Я создаю тепловую карту сайта. Я знаю, как получить координату xy клика, но на страницах в центрированных делениях координата xy клика зависит от ширины окна браузера пользователя.

Как мне зарегистрировать непротиворечивый xy, чтобы я мог отобразить местоположение щелчка позже независимо от размера окна?

Я могу использовать смещение jQuery (), чтобы получить xy на основе некоторого центрированного родительского элемента. Но я размещаю эту тепловую карту на нескольких сайтах. Итак, учитывая, что разметка каждого сайта уникальна, как мне определить, какой элемент "обертки" верхнего уровня следует использовать для вычисления смещения?

Есть какой-то более простой метод, который я пропускаю?

4 ответа

Как насчет сохранения не только x/y координаты клика, но и width/height вид-порт. Таким образом, вы можете получить позицию клика относительно порта просмотра и вычислить, где в контенте фактически произошел клик:

$(document).on('click', function (event) {
    var x = event.pageX,
        y = event.pageY,
        w = $(window).width(),
        h = $(window).height();
});

Вы можете оптимизировать это, только получая измерение порта представления, когда они изменяются:

var windowWidth  = 0,
    windowHeight = 0;

$(window).on('resize', function () {
    windowWidth  = $(this).width();
    windowHeight = $(this).height();
}).trigger('resize');//this .trigger will get the dimensions on page-load

$(document).on('click', function (event) {
    var x = event.pageX,
        y = event.pageY,
        w = windowWidth,
        h = windowHeight;
});

Обновить

Для центрированных страниц вы можете получить координату из центра порта просмотра:

var windowWidth  = 0,
    windowHeight = 0;

$(window).on('resize', function () {
    windowWidth  = $(this).width();
    windowHeight = $(this).height();
}).trigger('resize');//this .trigger will get the dimensions on page-load

$(document).on('click', function (event) {
    var x = (event.pageX - (windowWidth / 2)),
        y = event.pageY;
});

Это приведет к положительному x размеры для чего-либо на правой стороне страницы и отрицательные x размеры для чего-либо на левой стороне страницы.

Вот демо: http://jsfiddle.net/aWBFM/

Вы должны быть в состоянии определить положение мыши относительно левого верхнего угла страницы, посмотрев на event.clientX и event.clientY.

Если вы хотите, чтобы положение мыши было относительно определенного объекта, вы можете посмотреть на свойства offsetTop и offsetLeft этого объекта. (event.clientX - obj.offsetLeft) будет позицией мыши относительно объекта.

В соответствии с документацией offset() он получает координаты относительно документа, что вам и нужно. Что вам нужно сделать, это получить высоту и ширину окна. Затем, используя немного математики, рассчитайте расстояние между окном и картой.

$ (window).width () и $(window).height() получат то, что вам нужно.

Вы пытались использовать <body> элемент? Я знаю, что в HTML5 это не нужно, но я никогда не сталкивался с тем, чтобы он не использовался (и в нем задействовано нажатие).

Другие вопросы по тегам