14

jQuery を使用して一部のコンテナーにドロップできる一連のドラッグ可能な要素を実装しました。必要なのは、ユーザーの操作なしで要素を特定のコンテナーに移動するアニメーションです。問題は、要素とドロップ コンテナーがDOM の完全に異なる部分にあり、ほとんどが float を使用して配置されていることです。

必要なのは、できれば jQuery を使用して、2 つのフローティング DOM 要素間の絶対位置の差を取得するためのコードだけです。私が見つけた唯一のことは、DOM を上方に解析するいくつかのハックでしたが、常にブラウザー固有のものでした (たとえば、「これは Firefox や IE などではうまく機能しません」)。

ベストは次のようなものです:

var distance = getDistance(element1, element2);

またはjQuery表記で:

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

3 に答える 3

22

私はjQueryを使用したことがなく、APIを調べただけなので、次のことができると思います:

var o1 = $(element1).offset();
var o2 = $(element2).offset();
var dx = o1.left - o2.left;
var dy = o1.top - o2.top;
var 距離 = Math.sqrt(dx * dx + dy * dy);
于 2008-10-22T12:49:37.847 に答える
1

次はどうですか?

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);
于 2008-10-22T13:38:39.620 に答える
1

純粋な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));
于 2008-10-22T12:59:50.540 に答える