Получить относительную позицию между двумя элементами DOM, используя JavaScript - PullRequest
14 голосов
/ 22 октября 2008

Я реализовал набор перетаскиваемых элементов, которые можно поместить в некоторые контейнеры с помощью jQuery. Что мне нужно, это анимация, которая перемещает элемент в конкретный контейнер без взаимодействия с пользователем. Проблема в том, что элементы и контейнеры для отбрасывания находятся в полностью различных частях DOM и в основном расположены с использованием float.

Все, что мне нужно, это некоторый код, чтобы получить абсолютную разницу в позициях между двумя плавающими элементами DOM, предпочтительно с использованием jQuery. Единственное, что я обнаружил, это некоторые хаки, анализирующие DOM, но всегда очень специфичные для браузера (например, «это плохо работает с Firefox, IE или чем-то другим»).

Лучше всего будет что-то вроде этого:

var distance = getDistance(element1, element2);

или в формате jQuery:

var distance = $(element1).distanceTo($(element2));

Ответы [ 3 ]

22 голосов
/ 22 октября 2008

Я никогда не использовал jQuery, просто посмотрел API, поэтому могу предположить, что вы можете сделать следующее:

var o1 = $(element1).offset();
var o2 = $(element2).offset();
var dx = o1.left - o2.left;
var dy = o1.top - o2.top;
var distance = Math.sqrt(dx * dx + dy * dy);
1 голос
/ 22 октября 2008

А как насчет следующего?

var isIE = navigator.appName.indexOf("Microsoft") != -1;

function getDistance(obj1, obj2){
    var obj1 = document.getElementById(obj1);
    var obj2 = document.getElementById(obj2);
    var pos1 = getRelativePos(obj1);
    var pos2 = getRelativePos(obj2);
    var dx = pos1.offsetLeft - pos2.offsetLeft;
    var dy = pos1.offsetTop - pos2.offsetTop;
    return {x:dx, y:dy};
}
function getRelativePos(obj){
var pos = {offsetLeft:0,offsetTop:0};
while(obj!=null){
    pos.offsetLeft += obj.offsetLeft;
    pos.offsetTop += obj.offsetTop;
    obj = isIE ? obj.parentElement : obj.offsetParent;
}
return pos;
}
//
var obj = getDistance("element1","element2")
alert(obj.x+" | "+obj.y);
1 голос
/ 22 октября 2008

Использование чистого JavaScript.

var dx = obj1.offsetLeft - obj2.offsetLeft;
var dy = obj1.offsetTop - obj2.offsetTop;
var distance = Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...