使用jQuery获取鼠标的X / Y坐标单击图像

时间:2010-01-29 00:21:49

标签: jquery

我想使用jQuery来获取图像上单击事件的X / Y坐标。坐标应该相对于图像,而不是相对于整个页面

5 个答案:

答案 0 :(得分:172)

您可以使用pageX and pageY在窗口中获取鼠标的位置。您还可以使用jQuery的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);
  });
});

我做了live example herehere是来源。

要计算距离底部还是右边的距离,您必须使用jQuery的widthheight方法。

答案 1 :(得分:26)

请注意! e.clientX&之间存在差异e.clientYe.pageX以及e.pageY

尝试两者并确保使用正确的。 clientXclientY根据滚动位置进行更改

答案 2 :(得分:19)

这是一个更好的脚本:

$('#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);

});

答案 3 :(得分:9)

即使任何图像使窗口滚动,下面的代码仍然有效。

$(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/

答案 4 :(得分:3)

请查看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>