最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Get exact relative mouse position X Y - Stack Overflow

programmeradmin6浏览0评论

I create table, handlers hooked up mousemove. But in top left point I get .offsetX.offsetY equals -5-5. Why? I need 0\0.

<table cellpadding="0" 
       id="target" 
       cellspacing="0"
       width="602" 
       height="500"  
       style="float:left;
              position:relative;
              background: url(/content/games/kamikaze2/back.jpg) no-repeat 0 0;">
    <tbody>...
</tbody>
</table>

<script type="text/javascript">

    $("#target").mousemove(function (event) {
        var msg = "Handler for .mousemove() called at ";
        msg += event.offsetX + ", " + event.offsetY;
        $("#log").append("<div>" + msg + "</div>");
    });
</script>

I create table, handlers hooked up mousemove. But in top left point I get .offsetX.offsetY equals -5-5. Why? I need 0\0.

<table cellpadding="0" 
       id="target" 
       cellspacing="0"
       width="602" 
       height="500"  
       style="float:left;
              position:relative;
              background: url(/content/games/kamikaze2/back.jpg) no-repeat 0 0;">
    <tbody>...
</tbody>
</table>

<script type="text/javascript">

    $("#target").mousemove(function (event) {
        var msg = "Handler for .mousemove() called at ";
        msg += event.offsetX + ", " + event.offsetY;
        $("#log").append("<div>" + msg + "</div>");
    });
</script>
Share Improve this question edited Oct 7, 2021 at 12:15 Roko C. Buljan 206k41 gold badges327 silver badges336 bronze badges asked Apr 26, 2012 at 5:34 MediatorMediator 15.4k37 gold badges118 silver badges208 bronze badges 1
  • add margin:0px;padding:0px to the table style and try again. – Taha Paksu Commented Apr 26, 2012 at 5:41
Add a ment  | 

1 Answer 1

Reset to default 13

More examples here: show-popup-on-mouse-location


Mouse coordinates within element

The most accurate way to get the mouse coordinates within an element (without scrollbars) relative to viewport is by calculating the difference between

  • MouseEvent.clientX, MouseEvent.clientY and
  • Element.getBoundingClientRect()

const getMousePos = (evt) => {
  const pos = evt.currentTarget.getBoundingClientRect();
  return {
    x: evt.clientX - pos.left,
    y: evt.clientY - pos.top
  };
};

document.querySelector("#target").addEventListener('mousemove', (evt) => {
  const mPos = getMousePos(evt);
  evt.currentTarget.textContent = `Mouse position x:${mPos.x}  y:${mPos.y}`;
});
#target {
  position: absolute;
  left: 50px;
  top: 20px;
  width: 200px;
  height: 100px;
  background: #0bf;
  transform: translate(20px, 30px); /* works even with translate */
}
<div id="target"></div>

<script src="https://cdnjs.cloudflare./ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Subtracting those values you can retrieve the exact mouse position, x:0, y:0 being the upper left corner of your element. Even if an element is CSS-transformed, i.e: transform: translate(-50%, -50%), the returned values are still correct.

发布评论

评论列表(0)

  1. 暂无评论