Определить щелчок мыши для всех разрешений экрана - PullRequest
0 голосов
/ 13 июня 2010

У меня есть простой 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. Метки смещаются в неправильное место.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 13 июня 2010

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

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

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


Оригинальный ответ:

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

Это просто проблема масштабирования.

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

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.
1 голос
/ 13 июня 2010

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

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

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