Получить реальное положение объектов в Javascript с помощью Chrome

Я кодирую немного Javascript, чтобы случайно поместить утку наэта страница.

Я хотел, чтобы он скрывался на стороне объектов (например, постов), но в итоге мне пришлось жестко закодировать его, так как я не смог найти способ правильно определить реальное положение относительных объектов с помощью Chrome. Я прочитал довольно много об этом и использовал рекурсивный метод offsetParent, но не получил хороших результатов.

Последний фрагмент кода, который я попробовал, был таким:

 var getPost = function (obj) {
    var pos = {'x':0,'y':0};
    if(obj.offsetParent) {
        while(1) {
          pos.x += obj.offsetLeft;
          pos.y += obj.offsetTop;
          if(!obj.offsetParent) {
            break;
          }
          obj = obj.offsetParent;
        }
    } else if(obj.x) {
        pos.x += obj.x;
        pos.y += obj.y;
    }
    return pos;
  }

Этот код не работает в Chrome, за исключением объектов с абсолютной позицией (устанавливается с помощью CSS).

Есть ли хороший кросс-браузерный способ добиться этого?

 Pekka 웃18 сент. 2010 г., 11:18
Вы рассматривали возможность использования jQuery?
 ℝaphink18 сент. 2010 г., 11:20
У меня нет, потому что я хочу, чтобы все было просто, и это в блоге блоггера. Тем не менее, это может быть вариант.
 Soumen12 авг. 2013 г., 13:03
Гиперссылка, указанная в вопросе, недоступна. Вы можете отредактировать его.

Ответы на вопрос(1)

когда я работал с позициями мыши и объектами не так давно, потому что мне нужно было перетаскивать мышью. Итак, вот два метода, которые я придумал:

/**
 * 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
  };
}

Я надеюсь это тебе поможет. Это работает для меня в IE, Firefox и Chrome.

 ℝaphink18 сент. 2010 г., 21:13
Это почти то же самое, что я делаю сейчас. Кажется, моя проблема в том, что offsetParent не удается в какой-то момент, поэтому эта функция (или та, которую я использовал ранее) возвращает NaN для элементов, на которых я ее использую.

Ваш ответ на вопрос