Get real position of objects in Javascript with Chrome

前端 未结 3 1345
自闭症患者
自闭症患者 2021-01-24 04:12

I\'ve been coding a bit of Javascript to place a ducky randomly on this page.

I wanted to make it hide on the side of objects (like the posts), but I ended up having to

3条回答
  •  [愿得一人]
    2021-01-24 04:25

    I had a case where I was working with mouse positions and objects as well not so long ago because I needed some drag and drop. So these are the two methods I came up with:

    /**
     * Calculates the mouse x and y position from the mouse move event fired by the document
     * 
     * @param event
     *            the mouse move event fired by the document
     * 
     * @return the mouse coordinates object with two variables x and y
     */
    function mouseCoords(ev) {
      var event = ev;
    
      // IE does not pass the event object
      if (event == null)
        event = window.event;
    
      try {
    
        // normal style
        if (event.pageX) {
          return {
              x : event.pageX,
              y : event.pageY
          };
        }
        // IE style
        else {
          return {
              x : event.clientX + document.body.scrollLeft - document.body.clientLeft,
              y : event.clientY + document.body.scrollTop - document.body.clientTop
          };
        }
    
      } catch(ex) {
    
        // IE style
        return {
            x : event.clientX + document.body.scrollLeft - document.body.clientLeft,
            y : event.clientY + document.body.scrollTop - document.body.clientTop
        };
      }
    }
    
    /**
     * Calculates an object with the x and y coordinates of the given object
     * 
     * @param object
     *            the object of which the coordinates to be calculated
     * 
     * @return an object with x and y coordinates
     */
    function getObjectPosition(object) {
      var left = 0;
      var top = 0;
    
      while (object.offsetParent) {
    
        left += object.offsetLeft;
        top += object.offsetTop;
    
        object = object.offsetParent;
      }
    
      left += object.offsetLeft;
      top += object.offsetTop;
    
      return {
          x : left,
          y : top
      };
    }
    

    I hope this can help you. This works for me in IE, Firefox and Chrome.

提交回复
热议问题