使用jQuery如何获取目标元素上的点击坐标

IT技术 javascript jquery html css jquery-ui
2021-01-30 12:28:00

我的 html 元素有以下事件处理程序

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

我需要在点击时找到鼠标在#seek-bar 上的位置。我原以为上面的代码应该可以工作,但它给出了错误的结果

6个回答

您是否试图将鼠标指针的位置指向relative元素(或)只是鼠标指针位置

试试这个演示:http : //jsfiddle.net/AMsK9/


编辑 :

1) event.pageXevent.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));
    });
});
有一种更简单的方法来处理'#B':e.offsetX的情况e.offsetY我猜你想编辑它。我已经在这里更新了小提琴感谢这篇文章,我找到了这个解决方案,谢谢。
2021-03-18 12:28:00
谢谢,因为我个人对 offset() 和 position() 感到困惑,为了方便起见,任何需要进一步说明的人都可以阅读stackoverflow.com/questions/3202008/...
2021-03-18 12:28:00
很好的例子,但是 .position() 和 .offset() 之间的区别并不明显。您应该将元素 #C 包裹在某个具有示例位置的父 div 中,以查看点击 #C 会返回您在作为 #C 父元素的元素内的鼠标位置,这可能是最不常用的。
2021-03-19 12:28:00
我有一个固定在底部的元素 - 那是 100% 宽度,所以我使用窗口宽度作为 posX - 所以我能够确定用户是否点击了一个使用 :after css 规则制作的“X”在右上角。
2021-03-24 12:28:00
+1 示例...尽管我也会在此处添加代码,但如果您的链接失效,此问题将来将变得无用,我会在此处放置每个代码和简要说明:)
2021-03-31 12:28:00
$('#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);
});

试试这个:

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

在这里您可以通过 DEMO找到更多信息

百分比:

$('.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+'%');
});

如果MouseEvent.offsetX支持通过浏览器(所有主流浏览器实际上支持它),jQuery的事件对象将包含此属性。

MouseEvent.offsetX 只读属性提供该事件与目标节点的填充边缘之间鼠标指针的 X 坐标偏移。

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