Как зарегистрировать клик по координате xy, который остается надежным независимо от дизайна страницы - PullRequest
0 голосов
/ 22 февраля 2012

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 22 февраля 2012

Как насчет сохранения не только 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/

0 голосов
/ 22 февраля 2012

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

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

0 голосов
/ 22 февраля 2012

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

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

0 голосов
/ 22 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...