Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Положение мыши и смещение

Автор вопроса: GaleОтветов: 3

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

$("div#container").mousemove( function(e) {
      client_x = e.pageX;
  client_y = e.pageY;

  // save x,y

});

Теперь другой человек загружает ту же страницу, и я хочу показать им те же координаты (позиция x, x).

Как я могу получить ту же точку, если я должен принять во внимание, что контейнер div # не находится в том же положении, что и в моем браузере (учитывая разрешение экрана и прокрутку)?

  • Та же самая точка относительно #container или окна браузера? David Hellsing 27.08.2012
  • Я думаю, что лучше относительно контейнера, потому что контейнер может двигаться влево, вправо при изменении разрешения экрана. Gale 27.08.2012

javascriptjquerymousemove

Ответы

Ответ 1 · Charlie G

Это кажется невозможным из-за переменных, которые вы упомянули в вопросе. Разрешение экрана является основной причиной, но также зависит от размера окна. Сначала вы можете подумать, что можете вычислить положение мыши относительно фиксированных точек, как показано divs (например, возьмем переполнение стека, где основной контейнер сайта не изменяет размер вместе с окном браузера). Но если их окно меньше, чем контейнер, вы сделаете некоторые ложные предположения о том, что они видят.

При этом вы всегда можете просто вычислить положение мыши относительно фиксированных элементов, которые, как вы знаете, будут на экране, используя $.offset(), и просто предположить, что на их экране отображается все (или проверить размер $(window)) и используются "нормальные" условия просмотра.

Ответ 2 · рейтинг 6 · Ohad

Я бы использовал $.offset().top и $.offset().left родительского контейнера div и вычислил разницу между ними и текущими координатами X и Y курсора мыши.

.offset() всегда относится к документу, а не к родителю элемента.

Например:

$('#element').mousemove(function(e){
    var client_x = e.pageX;
    var client_y = e.pageY;
    var elementOffset = $(this).offset();
    client_x -= elementOffset.left;
    client_y -= elementOffset.top;

    // save x, y.
});

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

Ответ 3 · pau.moreno

Вы можете использовать значения, возвращаемые offset(), в вашем примере:

$("div#container").offset().left и $("div#container").offset().top

чтобы вычесть их из e.pageXи e.pageY.

offset() дает вам позицию соответствующего элемента относительно документа (см. документы), так что проблем нет если пользователи прокручивают вниз.

Пример: http://jsfiddle.net/3jMRS/

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы