代码之家  ›  专栏  ›  技术社区  ›  Ron Harlev

使用jquery获取鼠标单击图像的X/Y坐标[重复]

  •  96
  • Ron Harlev  · 技术社区  · 15 年前

    这个问题已经有了答案:

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

    5 回复  |  直到 10 年前
        1
  •  172
  •   erjiang    10 年前

    你可以使用 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 here here 是源头。

    要计算底部或右侧的距离,必须使用jquery width height 方法。

        2
  •  26
  •   axel22    13 年前

    注意!两者之间有区别 e.clientX 和; e.clientY e.pageX e.pageY

    把它们都试一下,确保你用的是正确的。 clientX clientY 根据滚动位置更改

        3
  •  19
  •   Eric Leschinski Mr. Napik    11 年前

    下面是一个更好的脚本:

    $('#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);
    
    });
    
        4
  •  9
  •   itsazzad    11 年前

    以下代码始终有效,即使有任何图像使窗口滚动。

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

        5
  •  3
  •   Troy Alford    11 年前

    看一看 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>