Как получить координаты щелчка на целевом элементе с помощью jQuery


109

У меня есть следующий обработчик событий для моего элемента html

jQuery("#seek-bar").click(function(e){
    var x = e.pageX - e.target.offsetLeft;
    alert(x);    
});

Мне нужно найти положение курсора мыши на # панели поиска во время щелчка. Я бы подумал, что приведенный выше код должен работать, но он дает неверный результат


4
Положение относительно элемента, области просмотра или всего документа?
Джеймс,

Я заставил его работать, используя e.layerX - e.target.offsetLeft, а для Oprea просто использовал e.offsetX
Роман

если вы хотите разместить его на адаптивном сайте. попробуйте эту статью, вы также можете получить ее на адаптивных сайтах. kvcodes.com/2014/03/…
Kvvaradha

Ответы:


235

Вы пытаетесь получить положение указателя мыши relativeна элементе (или) просто расположение указателя мыши?

Попробуйте эту демонстрацию: http://jsfiddle.net/AMsK9/


Редактировать :

1) event.pageX, event.pageYвыдает документ относительно положения мыши!

Ссылка : http://api.jquery.com/event.pageX/
http://api.jquery.com/event.pageY/

2) offset(): дает смещение позиции элемента

Ссылка : http://api.jquery.com/offset/

3) position(): дает вам относительное положение элемента, т.е.

считать, что элемент встроен в другой элемент

пример :

<div id="imParent">
   <div id="imchild" />
</div>

Ссылка : http://api.jquery.com/position/

HTML

<body>
   <div id="A" style="left:100px;"> Default    <br /> mouse<br/>position </div>
   <div id="B" style="left:300px;"> offset()   <br /> mouse<br/>position </div>
   <div id="C" style="left:500px;"> position() <br /> mouse<br/>position </div>
</body>

JavaScript

$(document).ready(function (e) {

    $('#A').click(function (e) { //Default mouse Position 
        alert(e.pageX + ' , ' + e.pageY);
    });

    $('#B').click(function (e) { //Offset mouse Position
        var posX = $(this).offset().left,
            posY = $(this).offset().top;
        alert((e.pageX - posX) + ' , ' + (e.pageY - posY));
    });

    $('#C').click(function (e) { //Relative ( to its parent) mouse position 
        var posX = $(this).position().left,
            posY = $(this).position().top;
        alert((e.pageX - posX) + ' , ' + (e.pageY - posY));
    });
});

9
+1 для примеров ... одно примечание, хотя я бы также добавил сюда код, если ваша ссылка умрет, этот вопрос станет бесполезным в будущем, я бы поместил код для каждого и краткое описание здесь :)
Ник Крейвер

2
Есть более простой способ сделать случай '#B': e.offsetXи e.offsetY. Думаю, вы хотели бы его отредактировать. Я уже обновил скрипку здесь . Я нашел это решение благодаря сообщению, так что спасибо.
toto_tico

Спасибо, потому что я лично запутался с offset () и position (), для тех, кто нуждается в дополнительных разъяснениях, можно прочитать stackoverflow.com/questions/3202008/… для удобства
simongcc

У меня был элемент, прикрепленный к нижней части - это была 100% ширина, поэтому я вместо этого использовал ширину окна в качестве posX - поэтому я смог определить, нажимал ли пользователь «X», который был сделан с помощью правила: after css, которое был в правом верхнем углу.
Амуррелл

Отличный пример, но не очевидно, в чем разница между .position () и .offset (). Вы должны обернуть элемент #C в некоторый родительский div с некоторой примерной позицией, чтобы увидеть, что щелчок по #C возвращает вашу позицию мыши внутри элемента, который является родительским для #C, что, вероятно, наименее полезно.
amik

15
$('#something').click(function (e){
    var elm = $(this);
    var xPos = e.pageX - elm.offset().left;
    var yPos = e.pageY - elm.offset().top;

    console.log(xPos, yPos);
});

3

Попробуй это:

jQuery(document).ready(function(){
   $("#special").click(function(e){
      $('#status2').html(e.pageX +', '+ e.pageY);
   }); 
})

Здесь вы можете найти больше информации о DEMO


1

В процентах:

$('.your-class').click(function (e){
    var $this = $(this); // or use $(e.target) in some cases;
    var offset = $this.offset();
    var width = $this.width();
    var height = $this.height();
    var posX = offset.left;
    var posY = offset.top;
    var x = e.pageX-posX;
        x = parseInt(x/width*100,10);
        x = x<0?0:x;
        x = x>100?100:x;
    var y = e.pageY-posY;
        y = parseInt(y/height*100,10);
        y = y<0?0:y;
        y = y>100?100:y;
    console.log(x+'% '+y+'%');
});

1

Если MouseEvent.offsetX это поддерживается вашим браузером (все основные браузеры на самом деле поддерживают), The JQuery объект Event будет содержать этот объект.

Свойство MouseEvent.offsetX, доступное только для чтения, обеспечивает смещение в координате X указателя мыши между этим событием и краем заполнения целевого узла.

$("#seek-bar").click(function(event) {
  var x = event.offsetX
  alert(x);    
});

0

см. здесь введите описание ссылки здесь

HTML

<body>
<p>This is a paragraph.</p>
<div id="myPosition">
</div>
</body>

css

#myPosition{
  background-color:red;
  height:200px;
  width:200px;
}

JQuery

$(document).ready(function(){
    $("#myPosition").click(function(e){
       var elm = $(this);
       var xPos = e.pageX - elm.offset().left;
       var yPos = e.pageY - elm.offset().top;
       alert("X position: " + xPos + ", Y position: " + yPos);
    });
});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.