Получение координат X/Y щелчка мыши на изображении с помощью jQuery
Я хотел бы использовать jQuery, чтобы получить координаты X/Y события щелчка на изображении. Координаты должны быть относительно изображения, а не относительно всей страницы
5 ответов
Ты можешь использовать pageX
а также pageY
чтобы получить положение мыши в окне. Вы также можете использовать JQuery's offset
чтобы получить положение элемента.
Так и должно быть pageX - offset.left
как далеко от левого края изображения и pageY - offset.top
как далеко от верхней части изображения.
Вот пример:
$(document).ready(function() {
$('img').click(function(e) {
var offset = $(this).offset();
alert(e.pageX - offset.left);
alert(e.pageY - offset.top);
});
});
Я сделал живой пример здесь и вот источник.
Чтобы подсчитать, как далеко от дна или справа, вам нужно использовать jQuery's width
а также height
методы.
Нота! есть разница между e.clientX
& e.clientY
а также e.pageX
а также e.pageY
попробуйте оба варианта и убедитесь, что вы используете правильный. clientX
а также clientY
изменить в зависимости от положения прокрутки
Вот лучший сценарий:
$('#mainimage').click(function(e)
{
var offset_t = $(this).offset().top - $(window).scrollTop();
var offset_l = $(this).offset().left - $(window).scrollLeft();
var left = Math.round( (e.clientX - offset_l) );
var top = Math.round( (e.clientY - offset_t) );
alert("Left: " + left + " Top: " + top);
});
Приведенный ниже код работает всегда, даже если любое изображение делает прокрутку окна.
$(function() {
$("#demo-box").click(function(e) {
var offset = $(this).offset();
var relativeX = (e.pageX - offset.left);
var relativeY = (e.pageY - offset.top);
alert("X: " + relativeX + " Y: " + relativeY);
});
});
Ссылка: http://css-tricks.com/snippets/jquery/get-x-y-mouse-coordinates/
Посмотрите на http://jsfiddle.net/TroyAlford/ZZEk8/ для рабочего примера ниже:
<img id='myImg' src='/my/img/link.gif' />
<script type="text/javascript">
$(document).bind('click', function () {
// Add a click-handler to the image.
$('#myImg').bind('click', function (ev) {
var $img = $(ev.target);
var offset = $img.offset();
var x = ev.clientX - offset.left;
var y = ev.clientY - offset.top;
alert('clicked at x: ' + x + ', y: ' + y);
});
});
</script>
Обратите внимание, что приведенное выше даст вам x и y относительно поля изображения - но не будет правильно учитывать поля, границы и отступы. Эти элементы на самом деле не являются частью изображения, но они могут быть частью элемента, который вы хотели бы принять во внимание.
В этом случае вы также должны использовать $div.outerWidth(true) - $div.width()
а также $div.outerHeight(true) - $div.height()
рассчитать сумму маржи / границы / и т. д.
Ваш новый код может выглядеть так:
<img id='myImg' src='/my/img/link.gif' />
<script type="text/javascript">
$(document).bind('click', function () {
// Add a click-handler to the image.
$('#myImg').bind('click', function (ev) {
var $img = $(ev.target);
var offset = $img.offset(); // Offset from the corner of the page.
var xMargin = ($img.outerWidth() - $img.width()) / 2;
var yMargin = ($img.outerHeight() - $img.height()) / 2;
// Note that the above calculations assume your left margin is
// equal to your right margin, top to bottom, etc. and the same
// for borders.
var x = (ev.clientX + xMargin) - offset.left;
var y = (ev.clientY + yMargin) - offset.top;
alert('clicked at x: ' + x + ', y: ' + y);
});
});
</script>