检测div的位置

时间:2009-03-04 11:36:49

标签: javascript html

我创建了一个小游戏,其中一些块在主div上移动。同时持有div的鼠标(我已将光标的位置分配给该div)。

我只是想跟踪一下,光标div是否在块上移动(那些也是div)。如果是这样,游戏就会结束。

如何检测块或光标div是否相互移动?

5 个答案:

答案 0 :(得分:4)

如果您使用的是jQuery,可以使用以下命令找到div的左侧,顶部,宽度和高度:

$(myDiv).offset().left
$(myDiv).offset().top
myDiv.offsetWidth
myDiv.offsetHeight

使用它们来计算每个div的左,右,顶部和底部。然后,如果出现两个div相互重叠:

left1 < right2 && left2 < right1 && top1 < bottom2 && top2 < bottom1

答案 1 :(得分:1)

这不是一个简单的使用普通javascript的任务,因为你必须追踪div的祖先并总结相对位置,直到你找到一个绝对定位的div。

另一方面,使用jQuery或Prototype等javascript库完成此任务非常简单。例如,在jQuery中,$(myDiv).offset()返回div相对于文档的位置。

如果你还包括jQuery UI,并使你的主div成为“可拖动”,并且所有其他div都是“Droppable”,那么你所需要的只是挂在Droppable's over event上以获得主要信息div被拖过另一个。

答案 2 :(得分:0)

您所谈论的概念称为collision detection

很简单,您需要获取div的边界,然后遍历所有块以查看它们是否重叠。

答案 3 :(得分:0)

getBoundingClientRect()

John Resig在这里有一篇很棒的文章:getBoundingClientRect is Awesome

答案 4 :(得分:0)

如果你不想使用jQuery,你可以从这里复制/粘贴(LGPL代码); http://code.google.com/p/ra-ajax/source/browse/trunk/Ra/Js/Ra.js

要寻找的地方是第8行的“绝对”功能。 220,递归地计算while循环中“祖先节点”的大小。

粘贴在这里以供参考;

var valueT = this.offsetTop  || 0;
var valueL = this.offsetLeft  || 0;
var el = this.offsetParent;

while (el) {
  Ra.extend(el, Ra.Element.prototype);
  if( el.tagName == 'BODY' ) {
    break;
  }
  var pos = el.getStyle('position');
  if( pos == 'relative' || pos == 'absolute') {
    break;
  }
  valueT += el.offsetTop  || 0;
  valueL += el.offsetLeft || 0;
  el = el.offsetParent;
}

“this”这里是一个DOM元素......

但是我怀疑你所拥有的是绝对定位div在另一个div中的位置:relative在这种情况下你可以使用;

var y = parseInt(myElement.style.top, 10);
var x = parseInt(myElement.style.left, 10);

这将是比“偏移循环”更快的数量级...