Korzystanie z jQuery, jak uzyskać współrzędne kliknięcia na elemencie docelowym

109

Mam następującą procedurę obsługi zdarzeń dla mojego elementu HTML

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

Muszę znaleźć pozycję myszy na pasku wyszukiwania # w momencie kliknięcia. Myślałem, że powyższy kod powinien działać, ale daje niepoprawny wynik

rzymski
źródło
4
Pozycja względem elementu, rzutni czy całego dokumentu?
James,
Zrobiłem to za pomocą e.layerX - e.target.offsetLeft, a dla Oprea właśnie użyłem e.offsetX
Roman
jeśli chcesz, aby była dostępna w responsywnej witrynie. wypróbuj ten artykuł, możesz go również pobrać na responsywnych witrynach. kvcodes.com/2014/03/…
Kvvaradha

Odpowiedzi:

235

Czy próbujesz uzyskać pozycję wskaźnika myszy relativedo elementu (lub) po prostu lokalizację wskaźnika myszy

Wypróbuj to demo: http://jsfiddle.net/AMsK9/


Edytować :

1) event.pageX, event.pageYpodaje dokument dotyczący pozycji myszy!

Odniesienie : http://api.jquery.com/event.pageX/
http://api.jquery.com/event.pageY/

2) offset(): Daje przesunięcie pozycji elementu

Ref : http://api.jquery.com/offset/

3) position(): Podaje względną pozycję elementu, tj.

rozważ element jest osadzony wewnątrz innego elementu

przykład :

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

Ref : 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));
    });
});

źródło
9
+1 dla przykładów ... jedna uwaga chociaż dodałbym również kod tutaj, jeśli twój link zginie, to pytanie stanie się bezużyteczne w przyszłości, umieściłbym kod dla każdego i krótki opis tutaj :)
Nick Craver
2
Jest prostszy sposób na wykonanie przypadku '#B': e.offsetXi e.offsetY. Myślę, że chciałbyś to edytować. Zaktualizowałem już skrzypce tutaj . Znalazłem to rozwiązanie dzięki poście, więc dzięki.
toto_tico,
Dzięki, ponieważ osobiście pomyliłem offset () i position (), dla każdego, kto potrzebuje dalszych wyjaśnień, może przeczytać stackoverflow.com/questions/3202008/ ... dla wygody
simongcc
Miałem element przymocowany do dołu - to było 100% szerokości, więc zamiast tego użyłem szerokości okna jako posX - więc mogłem określić, czy użytkownik kliknął „X”, który został utworzony za pomocą reguły: after css, która znajdował się w prawym górnym rogu.
amurrell
Świetny przykład, ale nie jest oczywiste, jaka jest różnica między .position () i .offset (). Powinieneś zawinąć element #C w jakiś nadrzędny div z jakąś przykładową pozycją, aby zobaczyć, że kliknięcie #C zwraca twoją pozycję myszy wewnątrz elementu, który jest rodzicem #C, co jest prawdopodobnie najmniej przydatne.
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);
});
Nisar
źródło
3

Spróbuj tego:

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

Tutaj możesz znaleźć więcej informacji o DEMO

Krunal
źródło
1

W procentach:

$('.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+'%');
});
l2aelba
źródło
1

Jeśli MouseEvent.offsetX jest obsługiwany przez przeglądarkę (wszystkie główne przeglądarki rzeczywiście wspierać go), The jQuery obiekt Event będzie zawierać tę właściwość.

Właściwość MouseEvent.offsetX tylko do odczytu zapewnia przesunięcie we współrzędnej X wskaźnika myszy między tym zdarzeniem a krawędzią dopełnienia węzła docelowego.

$("#seek-bar").click(function(event) {
  var x = event.offsetX
  alert(x);    
});
Memet Olsen
źródło
0

zobacz tutaj wprowadź opis linku tutaj

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);
    });
});
AirBlack
źródło