Я получаю координаты мыши на какой-то веб-странице и сохраняю их.
$("div#container").mousemove( function(e) {
client_x = e.pageX;
client_y = e.pageY;
// save x,y
});
Теперь другой человек загружает ту же страницу, и я хочу показать им те же координаты (позиция x, x).
Как я могу получить ту же точку, если я должен принять во внимание, что контейнер div # не находится в том же положении, что и в моем браузере (учитывая разрешение экрана и прокрутку)?
Ответ 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/