Получить позицию мыши в прокручиваемом блоке

Еще один вопрос, который меня клевал последние несколько дней. Как вы могли видеть из других моих вопросов, я создаю некую программу для интеллект-карт. Итак (очень упрощенно) у меня есть два div. Один представляет собой квадрат на странице, а другой - внутри этого div, который примерно в 10 раз больше и его можно перетаскивать. Это сделано для того, чтобы объекты можно было размещать на экране, а затем слегка перемещать в сторону, пока добавляется другой объект и т. Д. Я делаю это, создавая прокручиваемый внешний div.

Проблемы, которые у меня возникают, связаны с положение мыши в java-скрипте. Если я получу положение мыши в любом месте div, это будет неправильно, поскольку я смещаю внутренний div на половину его размера вверх и влево (так эффективно, что пользователь смотрит на середину холста и может двигаться как угодно) . Я пробовал десятки различных функций координат мыши, но, похоже, ни одна из них не работает. Пример, который должен быть кроссбраузерным, который я нашел где-то в Интернете:

function getMouse(e) {
  var posx;
  var posy;
  if (!e) var e = window.event;
  if (e.pageX || e.pageY) {
    posx = e.pageX;
    posy = e.pageY;
  }
  else if (e.clientX || e.clientY) {
    posx = e.clientX + document.body.scrollLeft + document.getElementById("canvas").scrollLeft;
    posy = e.clientY + document.body.scrollTop  + document.getElementById("canvas").scrollTop;
  }
} //getMouse

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

Я надеюсь, что кто-то там может мне помочь.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Не удалось упомянуть, что для части моего приложения я использую JQuery, поэтому решение с JQuery или без него будет подходящим. Еще раз спасибо.

14
задан Adam Holmes 11 February 2011 в 00:17
поделиться