-1

我正在制作一个 js 函数:
- 创建一个新 div
- 将新创建的 div 的 xy 坐标与其他已经存在的div 进行比较
- 如果新 div 的默认坐标已被现有 div 占据,则对角碰撞新 div

所以,如果我单击一个按钮并创建一个新的 div(一个可拖动的框),我只想快速扫描页面上已经存在的所有框的坐标,如果我找到一个已经有坐标的框放置在页面上的新框,将新框向下和向左一点。我可能还会把它放在一个循环中,以防最初的碰撞将它完全放到另一个盒子上。

我也在使用 jquery,如果这能得到回应。我已经知道如何进行编码,我的问题是方法。

我想知道哪个会更快地进行比较:

  • 将所有现有的 div 坐标对存储在 js 数组中(当拖动任何 div/框时会更新,实际上是先发制人地使用下一种方法),然后运行一个函数检查索引是否存在

    - 或 -

  • 一个循环遍历所有盒子 div 的 js 函数(它们都有一个共同的 css 类),直接在页面上检查所有现有的 div 坐标(而不是寻找存储在数组中的它们)

出于任何其他原因,我不需要将坐标存储在数组中,因此如果它一开始就不是更好的方法,那将是不必要的。将坐标存储在数组中基本上与后一种方法执行相同的过程,但我很好奇通过该数组的 javascript 是否会比首先检查坐标的过程更快。

我猜性能差异不会特别显着,但我很好奇哪种方法更明智。

4

2 回答 2

0

我不认为你的问题很清楚。当您只想检查被占用的 div 时,您的第一种方法是最快的,但是当您想检查最近的对时,这是一个众所周知的计算问题:http ://en.wikipedia.org/wiki/Closest_pair_of_points_problem 。

编辑:为什么不对潜水进行排序并将新的 div 添加到末尾?

于 2012-07-09T00:41:52.630 回答
0

您可能会发现 elementFromPoint 可用于此目的

https://developer.mozilla.org/En/DOM:document.elementFromPoint

它仅在给定点为您提供最前面的元素。在您的情况下,这可能有效。只需确保在将新 div 放入 DOM 树之前进行检查。

我不确定这是否适用于绝对定位元素,当然还有浏览器支持。

于 2012-07-09T01:46:04.697 回答