2010-06-12 4 views
0

у меня есть некоторый простой JavaScript, который определяет, где щелчок происходит в браузере здесь:Определить мыши для всех разрешений экрана

var clickDoc = (document.documentElement != undefined && document.documentElement.clientHeight != 0) ? document.documentElement : document.body; 
    var x = evt.clientX; 
    var y = evt.clientY; 
    var w = clickDoc.clientWidth != undefined ? clickDoc.clientWidth : window.innerWidth; 
    var h = clickDoc.clientHeight != undefined ? clickDoc.clientHeight : window.innerHeight; 
    var scrollx = window.pageXOffset == undefined ? clickDoc.scrollLeft : window.pageXOffset; 
    var scrolly = window.pageYOffset == undefined ? clickDoc.scrollTop : window.pageYOffset; 

    params = '&x=' + (x + scrollx) + '&y=' + (y + scrolly) + '&w=' + w + '&random=' + Date(); 

Все эти данные сохраняется в БД. Позже я получаю его и показываю, где все клики произошли на этой странице. Это отлично работает, если я делаю все мои клики в одном разрешении, а затем отображать его обратно в том же разрешении, но это не так. могут использоваться большие количества разрешений.

В моем тестовом примере я нажал на экран с разрешением экрана 1260x1080. Я извлек все данные и отобразил их в том же разрешении. Но когда я использую другой монитор (пробовал 1024x768 и 1920x1080.Метки смещаются в неправильное место.

Мой вопрос: если я храню ширину и высоту клиента и позицию x/y клика Если 3 разных пользователя с разными разрешениями экрана нажимают на одно и то же слово, а четвертый пользователь просматривает, где все эти клики произошли, как я могу правильно построить положение x/y, чтобы показать, что все нажали в одном пространстве, не имеет значения разрешения?

Если это относится в лучшем разделе, пожалуйста, дайте мне знать, как хорошо.

::: EDIT ::: После применения предложения Брока, я приложил два скриншота. Я нажал наслово «если» в начале каждого абзаца в разных разрешениях. При просмотре в обоих разрешениях клики, которые произошли в одном и том же разрешении, прямо на слове, когда это более высокое или низкое разрешение, оно смещается вправо или влево соответственно.

http://img291.imageshack.us/img291/5682/1260x1080.png http://img27.imageshack.us/img27/8950/1920x1080c.png

+0

Я не знаю ваших требований, но если это возможно для вас, подумайте о том, что запись пути элемента DOM была нажата, а не мыши. –

+0

Из этих снимков экрана он СМОТРЕТЬ, как поля разные. Опубликовать весь снимок экрана или - еще лучше - ссылку на страницу. Ниже я расскажу о своем ответе. –

ответ

1

Update:
Дополнительные вопросов для рассмотрения, проблема не может быть совершенно решаемой ...

  1. В различных размерах экрана, такие вещи, как края (для центрированного контента) будет отличаться. Нужно приспособиться к тому, где «Размер экрана» действительно становится clientWidth после компенсации изменения полей.

  2. Кроме того, несмотря на все, страница может отображаться по-разному при разных разрешениях экрана (плюс любой размер, в котором пользователь имеет свое окно браузера). Если это заставляет строки обертываться по-другому, это действительно избавит от сравнения.


Оригинал Ответ:

«, если я храню ширину и высоту клиента, а х/у положение мыши.Если 3 разных пользователя с разными разрешениями экрана нажимают на одно и то же слово, и четвертый пользователь отправляется на просмотр, где все эти клики произошли, как можно правильно построить положение x/y «

Это должно быть просто простая задача масштабирования

Псевдо код:.
Дано:

CapturedMousePosition = {X and Y coordinates of logged machine, in pixels} //-- EG [42, 69] 
CapturedScreenSize  = {width and height of logged machine, in pixels}  //-- EG [1260, 1080] 
TargetScreenSize  = {width and height of display machine, in pixels}  //-- EG [1024, 768] 
/*-- Note that client size and/or view-port size, are what we mean by "screen size" here. 
    This is because the browser will use some unknown fraction of the PC's display resolution. 
*/ 

Тогда:

TargetMousePosition  = CapturedMousePosition * TargetScreenSize/CapturedScreenSize 
EG: [42 * 1024/1260, 69 * 768/1080] -- Be sure to round to *nearest* integer. 
+0

Я близко, но вот где он стоит. Я нажал на одно слово в 1260x1080. Я нажал другое слово в 1920x1080. Затем я отобразил карту нагрева в 1260x1080. Просмотр кликов с одного разрешения был прекрасным, но клики с более высокого разрешения смещались вправо, как 2 слова (6 символов). При просмотре в 1920x1080 просмотр кликов, сделанных в том же разрешении, был прекрасным, но клики, сделанные в нижнем разрешении, сдвинулись влево примерно на такое же расстояние. – Nathan

+0

Обновлено оригинальное сообщение с изображениями проблемы. – Nathan

+1

Возможно ли, чтобы страницы слегка отличались при разных размерах экрана? Похоже, вы используете 'clientWidth' и' clientHeight' вместо фактического размера экрана - так что этого не должно быть. Отправьте ссылку на страницу или, по крайней мере, некоторые снимки экрана. 6 символов также подозрительно близки к ширине полосы прокрутки. –

1

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

Если вам нужно сохранить место в окне браузера (почему?), Вам также необходимо сохранить разрешение браузера или нормализованное значение на основе разрешения.

+0

Я создаю тепловую карту для мониторинга активности пользователя, которая отлично работает для записи и отображения в одном разрешении. Попытка убедиться, что все клики точны. – Nathan

Смежные вопросы